[svn] r7670: nemerle/trunk/ncc: hierarchy/ClassMembers.n
hierarchy/TypeBuilder.n hierarchy/TypesManager.n ...
nazgul
svnadmin at nemerle.org
Sat May 12 11:11:15 CEST 2007
Log:
Nothing changes refactoring of Typer constructors
Author: nazgul
Date: Sat May 12 11:11:12 2007
New Revision: 7670
Modified:
nemerle/trunk/ncc/hierarchy/ClassMembers.n
nemerle/trunk/ncc/hierarchy/TypeBuilder.n
nemerle/trunk/ncc/hierarchy/TypesManager.n
nemerle/trunk/ncc/typing/Messenger.n
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Sat May 12 11:11:12 2007
@@ -873,7 +873,9 @@
public RunBodyTyper () : void
{
match (fun_header.body) {
- | FunBody.Parsed => _ = Manager.ComponentsFactory.CreateTyper (this)
+ | FunBody.Parsed =>
+ def typer = Manager.ComponentsFactory.CreateTyper (this);
+ typer.RunFullTyping ();
| _ => ()
}
}
Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n Sat May 12 11:11:12 2007
@@ -2328,7 +2328,7 @@
}
internal process_attributes (self_parm : list [Parsetree.SyntaxElement], target : MacroTargets,
- stage : MacroPhase, mods : Modifiers, meth : IMethod) : void
+ stage : MacroPhase, mods : Modifiers, meth : MethodBuilder) : void
{
mutable macro_attrs = mods.macro_attrs;
// we have to do the assignment here, in case macro has added a new
Modified: nemerle/trunk/ncc/hierarchy/TypesManager.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypesManager.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypesManager.n Sat May 12 11:11:12 2007
@@ -53,7 +53,7 @@
public Expression : Parsetree.PExpr;
InitialParms : list [Parsetree.SyntaxElement];
TBuilder : TypeBuilder;
- CurrentMethod : IMethod;
+ CurrentMethod : MethodBuilder;
internal mutable AddedNr : int;
/// we need the earlier expanded macros to get the highest values, as heap is returning max values first
@@ -86,14 +86,13 @@
| Some ((name, imacro, exprs)) =>
def parms = InitialParms + exprs;
- def meth_header = if (CurrentMethod == null) null else CurrentMethod.GetHeader ();
- def tenv = if (meth_header == null) TEnv else meth_header.tenv;
+ def tenv = if (CurrentMethod == null) TEnv else CurrentMethod.Header.tenv;
def env = name.GetEnv (GEnv);
try {
GEnv.Manager.MacroColors.PushNewColor (name.color, env);
def res = Util.locate (Expression.Location,
- imacro.Run (GEnv.Manager.ComponentsFactory.CreateTyper (TBuilder, tenv, meth_header, env), parms));
+ imacro.Run (GEnv.Manager.ComponentsFactory.CreateTyper (TBuilder, tenv, CurrentMethod, env), parms));
assert (res == null);
} finally {
GEnv.Manager.MacroColors.PopColor ();
Modified: nemerle/trunk/ncc/typing/Messenger.n
==============================================================================
--- nemerle/trunk/ncc/typing/Messenger.n (original)
+++ nemerle/trunk/ncc/typing/Messenger.n Sat May 12 11:11:12 2007
@@ -27,6 +27,7 @@
*/
using Nemerle.Logging;
+using Nemerle.Utility;
namespace Nemerle.Compiler
{
@@ -39,6 +40,7 @@
mutable need_message : bool;
mutable throw_on_error : bool;
mutable previous : Messenger;
+ [Accessor (set (Internal))]
mutable in_error_mode : bool;
mutable saved_error : string;
mutable local_error : int;
@@ -172,15 +174,6 @@
}
}
-
- public InErrorMode : bool
- {
- get { in_error_mode }
- set {
- in_error_mode = value;
- }
- }
-
/** Check if we have encountered an error in the current state. */
public SeenError : bool
{
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Sat May 12 11:11:12 2007
@@ -106,48 +106,75 @@
#region Toplevel typing
class SwitchToYielding : System.Exception { }
- // FIXME: copy doc from TypeMethod
- /** Walk through method body typing it. */
+ /** Prepared for walking through method body typing it. */
public this (m : MethodBuilder)
{
- base (m.DeclaringType.Manager);
- current_method_builder = m;
- solver = Manager.Solver;
- current_type = m.DeclaringType;
- parent_typer = None ();
+ this (m.DeclaringType.Manager, m.DeclaringType, m);
env = current_type.GlobalEnv;
- current_fun = m.GetHeader ();
tenv = current_fun.tenv.CopyWithObsolete(TriggerObsoleteWarning);
- messenger = solver.CurrentMessenger;
- locals_stack = Stack ();
+ assert (!solver.InUse);
+ }
- local_context = LocalContext.Empty;
+ /** Prepred as reduced version of typer, ready to be passed to macros */
+ public this (tb : TypeBuilder, tenv : TyVarEnv, mb : MethodBuilder, env : GlobalEnv)
+ {
+ this (env.Manager, tb, mb);
+ this.env = env;
+ this.tenv = tenv;
+ assert (solver.IsTopLevel);
+ }
- assert (!solver.InUse);
+ /** Prepared for walking through a local function body typing it. */
+ public this (parent : Typer, fn : Fun_header)
+ {
+ this (parent.Manager);
+ parent_typer = Some (parent);
- is_instance_ctor = m.MemberKind == MemberKinds.Constructor && !m.IsStatic;
- is_method = m.MemberKind == MemberKinds.Method && !m.IsStatic || is_instance_ctor;
+ // copy from parent
+ current_method_builder = parent.current_method_builder;
+ current_type = parent.current_type;
+ local_context = parent.local_context;
+ is_method = parent.is_method;
+ is_instance_ctor = parent.is_instance_ctor;
+ env = parent.env;
+ inside_yielding_function = parent.inside_yielding_function;
+ messenger = parent.messenger;
+
+ current_fun = fn;
+ tenv = current_fun.tenv;
+ }
+
+ private this (mng : ManagerClass) {
+ base (mng);
+ locals_stack = Stack ();
+ solver = mng.Solver;
+ }
+
+ private this (mng : ManagerClass, tb : TypeBuilder, mb : MethodBuilder) {
+ this (mng);
+ current_type = tb;
+ parent_typer = None ();
+ local_context = LocalContext.Empty;
+ messenger = solver.CurrentMessenger;
+ current_method_builder = mb;
+ when (mb != null) {
+ current_fun = mb.Header;
+ is_instance_ctor = mb.MemberKind == MemberKinds.Constructor && !mb.IsStatic;
+ is_method = mb.MemberKind == MemberKinds.Method && !mb.IsStatic || is_instance_ctor;
+ }
+ }
+ public RunFullTyping () : void {
try {
assert (!solver.InUse);
assert (solver.IsTopLevel);
solver.dt_store = Map ();
solver.InUse = true;
- Util.locate (m.Location, {
+ Util.locate (current_method_builder.Location, {
mutable typer_done = false;
assert (messenger.IsTopLevel);
- def put_in_error_mode () {
- solver.Unwind ();
- messenger.Cleanup ();
- assert (!messenger.InErrorMode);
- assert (messenger.IsTopLevel);
- messenger.InErrorMode = true;
- local_context = LocalContext.Empty;
- assert (!typer_done);
- }
-
try {
try {
messenger.Cleanup ();
@@ -164,28 +191,28 @@
MaybeDumpTypedTree ("after delayed typings");
when (errcnt == Message.ErrorCount) {
- RunSecondPass (m);
+ RunSecondPass (current_method_builder);
MaybeDumpTypedTree ("after second pass");
}
} catch {
| e is RestartInErrorMode =>
def errcnt = Message.ErrorCount;
- put_in_error_mode ();
+ put_in_error_mode (typer_done);
RunTyper ();
when (errcnt == Message.ErrorCount)
- Util.ice ($"hidden errors compiling $m - $(Message.ErrorCount) vs $errcnt: $(e.StackTrace)");
+ Util.ice ($"hidden errors compiling $current_method_builder - $(Message.ErrorCount) vs $errcnt: $(e.StackTrace)");
}
} catch {
| _ is SwitchToYielding =>
messenger.InErrorMode = false;
- put_in_error_mode ();
+ put_in_error_mode (typer_done);
log (TYPING, "got STY, trying again");
current_fun.yield_type = GetYieldType ();
def errcnt = Message.ErrorCount;
// just in case
- def newBody = Util.locate(m.Body.Location, WrapYieldingFunction (m.Body));
- m.Body = newBody;
+ def newBody = Util.locate(current_method_builder.Body.Location, WrapYieldingFunction (current_method_builder.Body));
+ current_method_builder.Body = newBody;
inside_yielding_function = true;
when (Manager.IsIntelliSenseMode || errcnt == Message.ErrorCount) {
assert (solver.IsTopLevel);
@@ -195,7 +222,7 @@
when (Manager.IsIntelliSenseMode || errcnt == Message.ErrorCount)
RunDelayedTypings ();
when (errcnt == Message.ErrorCount) {
- RunSecondPass (m);
+ RunSecondPass (current_method_builder);
MaybeDumpTypedTree ("after second pass [yield mode]");
}
}
@@ -206,50 +233,20 @@
}
}
- internal TriggerObsoleteWarning : bool
- {
- get { (current_method_builder == null || !current_method_builder.IsObsolete)
- && !current_type.IsObsolete }
- }
-
- public this (tb : TypeBuilder, tenv : TyVarEnv, fn : Fun_header, env : GlobalEnv)
- {
- base (env.Manager);
- solver = Manager.Solver;
- current_type = tb;
- parent_typer = None ();
- this.env = env;
- current_fun = fn;
- this.tenv = tenv;
- messenger = solver.CurrentMessenger;
-
- locals_stack = Stack ();
+ put_in_error_mode (typer_done : bool) : void {
+ solver.Unwind ();
+ messenger.Cleanup ();
+ assert (!messenger.InErrorMode);
+ assert (messenger.IsTopLevel);
+ messenger.InErrorMode = true;
+ assert (!typer_done);
local_context = LocalContext.Empty;
- assert (solver.IsTopLevel);
}
- /** Walk through a local function body typing it. */
- public this (parent : Typer, fn : Fun_header)
+ internal TriggerObsoleteWarning : bool
{
- base (parent.Manager);
- parent_typer = Some (parent);
-
- // copy from parent
- solver = parent.solver;
- current_method_builder = parent.current_method_builder;
- current_type = parent.current_type;
- local_context = parent.local_context;
- is_method = parent.is_method;
- is_instance_ctor = parent.is_instance_ctor;
- env = parent.env;
- inside_yielding_function = parent.inside_yielding_function;
- messenger = parent.messenger;
- locals_stack = Stack ();
-
- current_fun = fn;
- tenv = current_fun.tenv;
-
- RunTyper ();
+ get { (current_method_builder == null || !current_method_builder.IsObsolete)
+ && !current_type.IsObsolete }
}
public GetLocals () : LocalContext
@@ -1880,7 +1877,8 @@
headers = List.Rev (headers);
foreach (hd in headers) {
- _ = Manager.ComponentsFactory.CreateTyper (this, hd);
+ def typer = Manager.ComponentsFactory.CreateTyper (this, hd);
+ typer.RunTyper ();
}
TExpr.DefFunctionsIn (headers, null)
More information about the svn
mailing list