[svn] r6009: nemerle/trunk/ncc: hierarchy/TypeBuilder.n misc/PrettyPrint.n typing/MacroColorizer.n typing/...

malekith svnadmin at nemerle.org
Thu Dec 15 21:39:19 CET 2005


Log:
Always use PopColor in try-finally. Add MacroColorizer.InGlobalColor (maybe :global splice would be a better idea). Use proper colors for _N_current and such.

Author: malekith
Date: Thu Dec 15 21:39:16 2005
New Revision: 6009

Modified:
   nemerle/trunk/ncc/hierarchy/TypeBuilder.n
   nemerle/trunk/ncc/misc/PrettyPrint.n
   nemerle/trunk/ncc/typing/MacroColorizer.n
   nemerle/trunk/ncc/typing/MacroRegistry.n
   nemerle/trunk/ncc/typing/Typer.n

Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n	(original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n	Thu Dec 15 21:39:16 2005
@@ -2290,13 +2290,16 @@
               if (meth_header == null) this.tenv else meth_header.tenv;
 
             def env = name.GetEnv (this.GlobalEnv);
+            try {
             MacroColorizer.PushNewColor (name.color, env);
             def parms = List.Append (self_parm, exprs);
             def res = Util.locate (expr.loc,
                         imacro.Run (Typer.Fake (this, tenv, meth_header, env), parms));
+              assert (res == null);
+            } finally {
             MacroColorizer.PopColor ();
+            }
 
-            assert (res == null);
         }
       };
     };

Modified: nemerle/trunk/ncc/misc/PrettyPrint.n
==============================================================================
--- nemerle/trunk/ncc/misc/PrettyPrint.n	(original)
+++ nemerle/trunk/ncc/misc/PrettyPrint.n	Thu Dec 15 21:39:16 2005
@@ -109,7 +109,9 @@
 
       if (expr == null) add ("(NULL)") else
       match (expr) {
-        | <[ $(n : name) ]> => add (n.Id)
+        | <[ $(n : name) ]> =>
+          add (n.Id);
+          // add ("."); add (n.color.ToString ());
 
         | <[ $obj . $mem ]> => 
           SprintExpr (ctx, obj, indentation, acc); add ("."); sprint_ss (mem)

Modified: nemerle/trunk/ncc/typing/MacroColorizer.n
==============================================================================
--- nemerle/trunk/ncc/typing/MacroColorizer.n	(original)
+++ nemerle/trunk/ncc/typing/MacroColorizer.n	Thu Dec 15 21:39:16 2005
@@ -62,6 +62,20 @@
     }
     
     
+    public InGlobalColor['a] (fn : void -> 'a) : 'a
+    {
+      try {
+        colors_stack = (Color, UseColor, UseContext) :: colors_stack;
+        Color = 1;
+        UseColor = 1;
+        UseContext = GlobalEnv.Core;
+        fn ()
+      } finally {
+        PopColor ();
+      }
+    }
+    
+    
     /** Creates new color for execution of macro expansion, stores
         this color as top of the stack, together with [macro_use]
         as context color of currently executed macro.

Modified: nemerle/trunk/ncc/typing/MacroRegistry.n
==============================================================================
--- nemerle/trunk/ncc/typing/MacroRegistry.n	(original)
+++ nemerle/trunk/ncc/typing/MacroRegistry.n	Thu Dec 15 21:39:16 2005
@@ -103,9 +103,13 @@
             | Some ((namepath, name)) =>
               match (name.GetEnv (ctx.Env).LookupMacro (namepath)) {
                 | Some (x) =>
+                  def expanded =
+                    try {
                   MacroColorizer.PushNewColor (name.color, name.GetEnv (ctx.Env));
-                  def expanded = Util.locate (expr.loc, x.Run (ctx, x.CallTransform (args)));
+                      Util.locate (expr.loc, x.Run (ctx, x.CallTransform (args)));
+                    } finally {
                   MacroColorizer.PopColor ();
+                    }
                   expand_macro (ctx, expanded);
                 | None => expr
               }
@@ -115,9 +119,13 @@
         | PExpr.MacroCall (name, namespc, parms) =>
           match (namespc.Value) {
             | NamespaceTree.TypeInfoCache.MacroCall (m) =>
+              def expanded = 
+                try {
               MacroColorizer.PushNewColor (name.color, name.GetEnv (ctx.Env));
-              def expanded = Util.locate (expr.loc, m.Run (ctx, parms));
+                  Util.locate (expr.loc, m.Run (ctx, parms));
+                } finally {
               MacroColorizer.PopColor ();        
+                }
               expand_macro (ctx, expanded)
             | _ =>
               Util.ice ("failed to resolve macro name `" + namespc.Name.ToString (".") + "'")

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Thu Dec 15 21:39:16 2005
@@ -147,6 +147,7 @@
                 Util.ice ($"hidden errors compiling $m");
                 
             | _ is SwitchToYielding =>
+              log (TYPING, "got STY, trying again");
               m.yield_stuff = yield_stuff;
               def errcnt = Message.ErrorCount;
               // just in case
@@ -3035,6 +3036,7 @@
           } else if (ns.Equals (yield_macro)) {
             when (! inside_yielding_function) {
               _ = GetYieldStuff ();
+              log (TYPING, "throwing STY");
               throw SwitchToYielding ();
             }
             _ = Expect (expected, InternalType.Void, "yield ``result''");
@@ -3106,14 +3108,19 @@
       def label =
         TExpr.Label (InternalType.Void, label_no, VoidLiteral ());
       
-      TypeExpr (<[ 
+      def expr =
+        MacroColorizer.InGlobalColor (fun () {
+          <[ 
         {
           _N_current = $expr;
           _N_state = $(state_no : int);
           _N_MoveNext_exit (true);
           $(label : typed)
         }
-      ]>)
+          ]>
+        });
+      
+      TypeExpr (expr)
     }
     
 



More information about the svn mailing list