[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