[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