[svn] r6512: nemerle/trunk/ncc: generation/HierarchyEmitter.n
generation/ILEmitter.n hierarchy/TypeBuilder...
nazgul
svnadmin at nemerle.org
Sat Aug 12 17:31:28 CEST 2006
Log:
Fix compiling and processing attributes in members added very late in macros (during typing of their class members)
Author: nazgul
Date: Sat Aug 12 17:31:22 2006
New Revision: 6512
Modified:
nemerle/trunk/ncc/generation/HierarchyEmitter.n
nemerle/trunk/ncc/generation/ILEmitter.n
nemerle/trunk/ncc/hierarchy/TypeBuilder.n
nemerle/trunk/ncc/testsuite/positive/macrolib.n
nemerle/trunk/ncc/testsuite/positive/macroprog.n
Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n (original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n Sat Aug 12 17:31:22 2006
@@ -366,14 +366,9 @@
mem.CreateEmitBuilder (ti.GetTypeBuilder ());
when (_cgil_phase >= 3)
- match (mem) {
- | meth is MethodBuilder =>
ti.DoBeforeFinalization (fun () {
- meth.RunBodyTyper ();
- meth.CompileAfterTyping ()
+ mem.Compile ()
})
- | _ => {}
- }
}
Modified: nemerle/trunk/ncc/generation/ILEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/ILEmitter.n (original)
+++ nemerle/trunk/ncc/generation/ILEmitter.n Sat Aug 12 17:31:22 2006
@@ -147,7 +147,7 @@
_ilg.Emit (OpCodes.Ret);
// let GC take it
_fun_header.body = FunBody.ILed ();
- | _ => Util.ice ()
+ | _ => Util.ice ($"method $_method_name is already ILed")
}
_label_usage.Iter (fun (id, v : TExpr) {
Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n Sat Aug 12 17:31:22 2006
@@ -448,15 +448,17 @@
| _ => {}
}
- if (member_map == null) {
- additional_decls = f :: additional_decls;
add_macros_from_parsedmems (f, MacroPhase.BeforeInheritance);
add_macros_from_parsedmems (f, MacroPhase.BeforeTypedMembers);
+
+ if (member_map == null) {
+ additional_decls = f :: additional_decls;
null
}
else {
try {
def mem = bind_and_add_member (f);
+ TyManager.ExpandMacros ();
when (TyManager.IsEmitting) {
TyManager.EnsureEmitProgress (this);
when (IsFinalized)
Modified: nemerle/trunk/ncc/testsuite/positive/macrolib.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/macrolib.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/macrolib.n Sat Aug 12 17:31:22 2006
@@ -414,3 +414,10 @@
| _ => <[ $(MyEnum.C : enum) ]>
}
}
+
+macro create_initialized_field () {
+ def tb = Nemerle.Macros.ImplicitCTX().CurrentTypeBuilder;
+ def n = Macros.NewSymbol ("log4net_logger");
+ tb.Define (<[ decl: private static $(n : name) : object = object(); ]>);
+ <[ $(n : name) ]>
+}
\ No newline at end of file
Modified: nemerle/trunk/ncc/testsuite/positive/macroprog.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/macroprog.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/macroprog.n Sat Aug 12 17:31:22 2006
@@ -78,6 +78,8 @@
assert ((typeof(M).Assembly.GetCustomAttributes (typeof(System.Reflection.AssemblyCompanyAttribute), false)[0] :> System.Reflection.AssemblyCompanyAttribute).Company == "foo");
assert (create_enum (1) == MyEnum.A);
+
+ assert (create_initialized_field () != null);
}
}
More information about the svn
mailing list