[svn] r6514: nemerle/trunk: macros/assertions.n ncc/hierarchy/TypesManager.n

nazgul svnadmin at nemerle.org
Sat Aug 12 19:25:57 CEST 2006


Log:
Actually, it is better idea to prevent looping during expansion

Author: nazgul
Date: Sat Aug 12 19:25:54 2006
New Revision: 6514

Modified:
   nemerle/trunk/macros/assertions.n
   nemerle/trunk/ncc/hierarchy/TypesManager.n

Modified: nemerle/trunk/macros/assertions.n
==============================================================================
--- nemerle/trunk/macros/assertions.n	(original)
+++ nemerle/trunk/macros/assertions.n	Sat Aug 12 19:25:54 2006
@@ -207,14 +207,14 @@
           ]>
         };
         ty.Define ( <[ decl:
+          public mutable _N_invariant_lock : bool;
+        ]> );
+        ty.Define ( <[ decl:
           public virtual _N_invariant () : void
           {
             assert ($body, "The class invariant has been violated.")
           }
         ]> );
-        ty.Define ( <[ decl:
-          public mutable _N_invariant_lock : bool;
-        ]> );
       | Some (m) =>
         def m = m :> MethodBuilder;
         m.Body = <[

Modified: nemerle/trunk/ncc/hierarchy/TypesManager.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypesManager.n	(original)
+++ nemerle/trunk/ncc/hierarchy/TypesManager.n	Sat Aug 12 19:25:54 2006
@@ -139,17 +139,21 @@
       attribute_macros_queue.Add (exp);
     }
 
+    private mutable is_expanding : bool = false;
     internal ExpandMacros () : void {
+      when (is_expanding) Nemerle.Imperative.Return ();      
+      
       def stage = current_macro_phase;
+      is_expanding = true;
       while (!attribute_macros_queue.IsEmpty) {
         def first = attribute_macros_queue.Top();
         when (first.Phase :> int > stage :> int) 
           Nemerle.Imperative.Break();
       
-          
         //Message.Debug ($"expanding $first");
         _ = attribute_macros_queue.ExtractFirst().Expand();
       }
+      is_expanding = false;
     }
     
     current_macro_phase : MacroPhase



More information about the svn mailing list