[svn] r6329: nemerle/trunk: boot/Nemerle.Compiler.dll boot/Nemerle.Macros.dll boot/Nemerle.dll boot/ncc.ex...

malekith svnadmin at nemerle.org
Wed May 24 18:53:54 CEST 2006


Log:
Make InternalType and SystemTypeCache classes.

Author: malekith
Date: Wed May 24 18:53:21 2006
New Revision: 6329

Modified:
   nemerle/trunk/boot/Nemerle.Compiler.dll
   nemerle/trunk/boot/Nemerle.Macros.dll
   nemerle/trunk/boot/Nemerle.dll
   nemerle/trunk/boot/ncc.exe
   nemerle/trunk/macros/compiler.n
   nemerle/trunk/macros/core.n
   nemerle/trunk/ncc/external/Codec.n
   nemerle/trunk/ncc/external/InternalTypes.n
   nemerle/trunk/ncc/external/LibrariesLoader.n
   nemerle/trunk/ncc/generation/DecisionTreeCompiler.n
   nemerle/trunk/ncc/generation/HierarchyEmitter.n
   nemerle/trunk/ncc/generation/ILEmitter.n
   nemerle/trunk/ncc/generation/Typer3.n
   nemerle/trunk/ncc/generation/Typer4.n
   nemerle/trunk/ncc/hierarchy/ClassMembers.n
   nemerle/trunk/ncc/hierarchy/CustomAttribute.n
   nemerle/trunk/ncc/hierarchy/TypeBuilder.n
   nemerle/trunk/ncc/parsing/AST.n
   nemerle/trunk/ncc/passes.n
   nemerle/trunk/ncc/typing/ConstantFolder.n
   nemerle/trunk/ncc/typing/DecisionTreeBuilder.n
   nemerle/trunk/ncc/typing/MType.n
   nemerle/trunk/ncc/typing/OverloadPossibility.n
   nemerle/trunk/ncc/typing/Subst.n
   nemerle/trunk/ncc/typing/TypedTree.n
   nemerle/trunk/ncc/typing/Typer-CallTyper.n
   nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
   nemerle/trunk/ncc/typing/Typer-PatternTyper.n
   nemerle/trunk/ncc/typing/Typer.n
   nemerle/trunk/ncc/typing/Typer2.n

Modified: nemerle/trunk/boot/Nemerle.Compiler.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/Nemerle.Macros.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/Nemerle.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/ncc.exe
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/macros/compiler.n
==============================================================================
--- nemerle/trunk/macros/compiler.n	(original)
+++ nemerle/trunk/macros/compiler.n	Wed May 24 18:53:21 2006
@@ -68,9 +68,38 @@
 {
   [Nemerle.MacroUsage (Nemerle.MacroPhase.BeforeInheritance,
                        Nemerle.MacroTargets.Class)]
-  macro ManagerAccess (tb : TypeBuilder)
+  macro ManagerAccess (tb : TypeBuilder, params options : list [PExpr])
   {
+    match (options) {
+      | [] => {}
     tb.Define (<[ decl: public Manager : ManagerClass; ]>);
+      | [expr] =>
+        tb.Define (<[ decl: 
+          public Manager : ManagerClass { get { $expr } } ]>);
+      | _ => Message.Error ("invalid option to ManagerAccess")
+    }
+
+    tb.Define (<[ decl: 
+      public InternalType : InternalTypeClass
+      {
+        get { Manager.InternalType }
+      }
+    ]>);
+    tb.Define (<[ decl: 
+      public SystemTypeCache : SystemTypeClass
+      {
+        get { Manager.SystemTypeCache }
+      }
+    ]>);
+    // prevent N10003 warning
+    tb.Define (<[ decl: 
+      private __fake () : void
+      {
+        __fake ();
+        _ = SystemTypeCache;
+        _ = InternalType;
+      }
+    ]>);
   }
 }
 

Modified: nemerle/trunk/macros/core.n
==============================================================================
--- nemerle/trunk/macros/core.n	(original)
+++ nemerle/trunk/macros/core.n	Wed May 24 18:53:21 2006
@@ -420,7 +420,7 @@
     typer.DelayMacro (fun (fail_loudly) {
       match (tcollection.Type.Hint) {
         | Some (MType.Class (tc, args)) =>
-          if (tc.SuperType (InternalType.Nemerle_list_tc).IsSome) {
+          if (tc.SuperType (ManagerClass.Instance.InternalType.Nemerle_list_tc).IsSome) {
             def arg = List.Head (args);
             def definition = build_definition (<[ x ]>);
             Some (<[

Modified: nemerle/trunk/ncc/external/Codec.n
==============================================================================
--- nemerle/trunk/ncc/external/Codec.n	(original)
+++ nemerle/trunk/ncc/external/Codec.n	Wed May 24 18:53:21 2006
@@ -92,7 +92,7 @@
       | Term.App (name, args) when name[0] != '.' =>
         match (lib.Manager.NameTree.LookupExactType (NString.Split (name, array ['.', '+']))) {
           | Some (tc) =>
-            if (tc.FullName == "System.Void") InternalType.Void
+            if (tc.FullName == "System.Void") lib.Manager.InternalType.Void
             else
               MType.Class (tc, List.Map (args, self)).Expand ()
           | None =>

Modified: nemerle/trunk/ncc/external/InternalTypes.n
==============================================================================
--- nemerle/trunk/ncc/external/InternalTypes.n	(original)
+++ nemerle/trunk/ncc/external/InternalTypes.n	Wed May 24 18:53:21 2006
@@ -36,7 +36,7 @@
 namespace Nemerle.Compiler {
 
 [ManagerAccess]
-public module SystemTypeCache 
+public class SystemTypeClass
 {
   public mutable Array : System.Type;
   public mutable Boolean : System.Type;
@@ -229,9 +229,9 @@
     Delegate_Remove = Delegate.GetMethod ("Remove", array [Delegate, Delegate]);
   }
 
-  this ()
+  internal this (man : ManagerClass)
   {
-    Manager = ManagerClass.Instance;
+    Manager = man;
   }
 }
 
@@ -260,7 +260,7 @@
   {
     match (ty.Fix ()) {
       | Tuple (types) =>
-        def inst = InternalType.GetTupleType (types.Length);
+        def inst = ManagerClass.Instance.InternalType.GetTupleType (types.Length);
         MType.Class (inst.tycon, types)
       | _ => Util.ice ()
     }
@@ -284,7 +284,7 @@
   {
     def dt = ty.DeclaringType;
     def typarms = dt.TyparmsCount;
-    typarms > 1 && dt.Equals (InternalType.GetTupleType (typarms).tycon)
+    typarms > 1 && dt.Equals (ManagerClass.Instance.InternalType.GetTupleType (typarms).tycon)
   }
   
   internal this (m : ManagerClass, size : int)
@@ -327,7 +327,7 @@
   {
     match (ty.Fix ().FunReturnTypeAndParms ()) {
       | Some ((parms, ret)) =>
-        def inst = InternalType.GetFunctionType (parms.Length);
+        def inst = ManagerClass.Instance.InternalType.GetFunctionType (parms.Length);
         if (ret.Fix () is MType.Void)
           MType.Class (inst.VoidTyCon, parms)
         else
@@ -357,7 +357,7 @@
   
 
 [ManagerAccess]
-public module InternalType
+public class InternalTypeClass
 {
   public mutable Array_tc : TypeInfo;
   public mutable Attribute_tc : TypeInfo;
@@ -482,7 +482,7 @@
     }
   }
 
-  get_single_method (tc : TypeInfo, name : string) : IMethod
+  static get_single_method (tc : TypeInfo, name : string) : IMethod
   {
     match (tc.LookupMember (name)) {
       | [x] => x :> IMethod
@@ -640,9 +640,9 @@
     }
   }
 
-  this ()
+  internal this (man : ManagerClass)
   {
-    Manager = ManagerClass.Instance;
+    Manager = man;
   }
 }
 

Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n	(original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n	Wed May 24 18:53:21 2006
@@ -1350,6 +1350,7 @@
       }
     }
     
+    [ManagerAccess (library.Manager)]
     private class FieldInfo : IField
     {
       protected handle : SR.FieldInfo;
@@ -1527,6 +1528,7 @@
       }
     }
 
+    [ManagerAccess (library.Manager)]
     class NetEvent : IEvent
     {
       protected handle : SR.EventInfo;
@@ -1660,6 +1662,7 @@
       }
     }
     
+    [ManagerAccess (library.Manager)]
     class NetProperty : IProperty
     {
       protected handle : SR.PropertyInfo;
@@ -1829,6 +1832,7 @@
       }
     }
     
+    [ManagerAccess (library.Manager)]
     class MethodInfo : IMethod
     {
       protected handle : SR.MethodBase;
@@ -2072,7 +2076,7 @@
     }
 
 
-    private static get_variant_options (system_type : System.Type) : list [string]
+    private get_variant_options (system_type : System.Type) : list [string]
     {
       def str = get_string_attribute (system_type, SystemTypeCache.VariantAttribute, "GetVariantOptions");
       NString.Split (str, array [','])
@@ -2088,7 +2092,7 @@
         base (lib, h, ns_node);
 
         if (system_type.IsDefined (SystemTypeCache.VariantAttribute, false)) {
-          def names = get_variant_options (system_type);
+          def names = lib.get_variant_options (system_type);
           def get_opt (name : string) {
             match (lib.LibRefManager.NameTree.LookupExactType (NString.Split (name, array ['.', '+']))) {
               | Some (tc) => tc

Modified: nemerle/trunk/ncc/generation/DecisionTreeCompiler.n
==============================================================================
--- nemerle/trunk/ncc/generation/DecisionTreeCompiler.n	(original)
+++ nemerle/trunk/ncc/generation/DecisionTreeCompiler.n	Wed May 24 18:53:21 2006
@@ -72,8 +72,7 @@
           def (name, value) = assign;
           Util.locate (value.loc,
             TExpr.Sequence (effect_expr.Type,
-              TExpr.Assign (InternalType.Void,
-                            TExpr.LocalRef (name.Type, name),
+              TExpr.Assign (TExpr.LocalRef (name.Type, name),
                             value),
               acc))
           })
@@ -379,7 +378,7 @@
     /**
      * Emit comparison code with specific literal.
      */
-    static emit_compare_with (compare_to : TExpr, literal : Literal) : TExpr
+    emit_compare_with (compare_to : TExpr, literal : Literal) : TExpr
     {
       def method =
         match (literal) {
@@ -450,7 +449,7 @@
       }
     }
 
-    static ThrowMatchFailure () : TExpr
+    ThrowMatchFailure () : TExpr
     {
       def ctor = InternalType.NewMatchFailureException_ctor;
       TExpr.Throw (Solver.FreshTyVar (),

Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n	Wed May 24 18:53:21 2006
@@ -211,18 +211,18 @@
     {
       Manager.Solver.Enqueue (fun () {
         compile_all_tyinfos (false);
-        foreach (x in AttributeCompiler.GetCompiledAssemblyAttributes (assembly_attributes))
+        foreach (x in Manager.AttributeCompiler.GetCompiledAssemblyAttributes (assembly_attributes))
           _assembly_builder.SetCustomAttribute (x);
           
         // emit debug attributes
         when (Manager.Options.EmitDebug) {
-          def attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.DebuggableAttribute, array [SystemTypeCache.DebuggableAttribute_DebuggingModes], 
+          def attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.DebuggableAttribute, array [SystemTypeCache.DebuggableAttribute_DebuggingModes], 
             DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.Default);
           _assembly_builder.SetCustomAttribute (attr);
         }
 
         // do not require string literals interning
-        def attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.CompilationRelaxationsAttribute, 8);
+        def attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.CompilationRelaxationsAttribute, 8);
         _assembly_builder.SetCustomAttribute (attr);
         
         // wrap non exception throws
@@ -251,7 +251,7 @@
 
       // if there are some nemerle specific metadata encoded in attributes
       when (contains_nemerle_specifics) {
-        def attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.Reflection_AssemblyConfigurationAttribute, "ContainsNemerleTypes");
+        def attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.Reflection_AssemblyConfigurationAttribute, "ContainsNemerleTypes");
         this._assembly_builder.SetCustomAttribute (attr);
       }
           
@@ -305,7 +305,7 @@
           //Message.Debug ("make type builder for " + ti.FullName);
           ti.CreateEmitBuilder ();
           when (ti.Attributes %&& NemerleAttributes.Macro) {
-            def attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.ContainsMacroAttribute, ti.GetTypeBuilder ().FullName);
+            def attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.ContainsMacroAttribute, ti.GetTypeBuilder ().FullName);
             _assembly_builder.SetCustomAttribute (attr);
           }
         }
@@ -503,28 +503,28 @@
     /**
      * Builds a Nemerle variant attribute
      */
-    private static make_nemerle_variant_attribute (decls : list [TypeInfo]) : Emit.CustomAttributeBuilder
+    private make_nemerle_variant_attribute (decls : list [TypeInfo]) : Emit.CustomAttributeBuilder
     {
       def names = decls.Map (fun (decl) { decl.FullName });
-      AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.VariantAttribute, NString.Concat (",", names))
+      Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.VariantAttribute, NString.Concat (",", names))
     }
 
 
     /**
      * Builds a Nemerle type alias
      */
-    private static make_nemerle_type_alias_attribute (t : MType) : Emit.CustomAttributeBuilder
+    private make_nemerle_type_alias_attribute (t : MType) : Emit.CustomAttributeBuilder
     {
-      AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.TypeAliasAttribute, TyCodec.EncodeType (t))
+      Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.TypeAliasAttribute, TyCodec.EncodeType (t))
     }
 
 
     /**
      * Builds a Nemerle variant option attribute
      */
-    private static make_nemerle_variant_option_attribute (is_const : bool) : Emit.CustomAttributeBuilder
+    private make_nemerle_variant_option_attribute (is_const : bool) : Emit.CustomAttributeBuilder
     {
-      AttributeCompiler.MakeEmittedAttribute (if (is_const)
+      Manager.AttributeCompiler.MakeEmittedAttribute (if (is_const)
                              SystemTypeCache.ConstantVariantOptionAttribute
                            else
                              SystemTypeCache.VariantOptionAttribute)
@@ -878,7 +878,7 @@
       if (fun_header.typarms.IsEmpty) {
         def parm_types_array = param_types ();
 
-        method_builder = AttributeCompiler.CheckPInvoking (this, tb, attrs, parm_types_array);
+        method_builder = Manager.AttributeCompiler.CheckPInvoking (this, tb, attrs, parm_types_array);
 
         if (method_builder == null)
           method_builder = tb.DefineMethod (Name, attrs);
@@ -1069,12 +1069,12 @@
       }
       
       when (IsVolatile) {
-        def volatile_attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.VolatileModifier);
+        def volatile_attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.VolatileModifier);
         field_builder.SetCustomAttribute (volatile_attr)
       }
 
       unless (IsMutable) {
-        def imm_attr = AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.ImmutableAttribute);
+        def imm_attr = Manager.AttributeCompiler.MakeEmittedAttribute (SystemTypeCache.ImmutableAttribute);
         field_builder.SetCustomAttribute (imm_attr)
       }
     }

Modified: nemerle/trunk/ncc/generation/ILEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/ILEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/ILEmitter.n	Wed May 24 18:53:21 2006
@@ -45,6 +45,7 @@
   /**
    * Generates the IL code for a method or a constructor
    */
+  [ManagerAccess]
   class ILEmitter
   {
     private _module_builder : ModuleBuilder;
@@ -95,6 +96,7 @@
     internal this (method_builder : Emit.MethodBuilder, type_ : Nemerle.Compiler.TypeBuilder, 
                    fun_header : Typedtree.Fun_header)
     {
+      Manager = type_.Manager;
       _fun_header = fun_header;
 
       _ilg = method_builder.GetILGenerator ();
@@ -116,6 +118,7 @@
     internal this (constructor_builder : Emit.ConstructorBuilder,
                    type_ : Nemerle.Compiler.TypeBuilder, fun_header : Typedtree.Fun_header)
     {
+      Manager = type_.Manager;
       _fun_header = fun_header;
 
       _ilg = constructor_builder.GetILGenerator ();
@@ -233,7 +236,7 @@
     }
 
 
-    static is_void (ty : TyVar) : bool
+    is_void (ty : TyVar) : bool
     {
       ty.Fix () : object == InternalType.Void
     }

Modified: nemerle/trunk/ncc/generation/Typer3.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer3.n	(original)
+++ nemerle/trunk/ncc/generation/Typer3.n	Wed May 24 18:53:21 2006
@@ -212,7 +212,7 @@
 
     #region Utilities
     // expects reversed list
-    internal static BuildRevSequence (exprs : list [TExpr]) : TExpr
+    internal BuildRevSequence (exprs : list [TExpr]) : TExpr
     {
       match (exprs) {
         | [] =>
@@ -354,7 +354,7 @@
     }
 
 
-    static IsObject (t : TyVar) : bool
+    IsObject (t : TyVar) : bool
     {
       t.Fix ().Equals (InternalType.Object)
     }
@@ -767,7 +767,7 @@
       ]>
     }
 
-    static RewriteTryFinally (clo_type : TypeBuilder, fh : Fun_header) : void
+    RewriteTryFinally (clo_type : TypeBuilder, fh : Fun_header) : void
     {
       mutable dispose_expr = Typer.VoidLiteral ();
 

Modified: nemerle/trunk/ncc/generation/Typer4.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer4.n	(original)
+++ nemerle/trunk/ncc/generation/Typer4.n	Wed May 24 18:53:21 2006
@@ -467,6 +467,7 @@
     static DoWalk (expr : TExpr) : TExpr
     {
       // Message.Debug ($ "dowalk: $(expr.GetType()) $(expr.Type)");
+      def InternalType = ManagerClass.Instance.InternalType;
       def res =
         match (expr) {
           | FieldMember (obj, fld) when ! expr.IsAssigned =>

Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n	(original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n	Wed May 24 18:53:21 2006
@@ -36,6 +36,7 @@
 
 namespace Nemerle.Compiler {
 
+[ManagerAccess (declaring_type.Manager)]
 public abstract class MemberBuilder : IMember
 {
   protected loc : Location;
@@ -53,11 +54,6 @@
   internal mutable ty : MType;
   protected mutable handle : MemberInfo;
 
-  public Manager : ManagerClass
-  {
-    get { declaring_type.Manager }
-  }
-
   [Accessor (flags = WantSetter)]
   protected mutable attributes : NemerleAttributes;
 

Modified: nemerle/trunk/ncc/hierarchy/CustomAttribute.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/CustomAttribute.n	(original)
+++ nemerle/trunk/ncc/hierarchy/CustomAttribute.n	Wed May 24 18:53:21 2006
@@ -40,8 +40,8 @@
 
 namespace Nemerle.Compiler 
 {
-  // stateless utility module for operating on attibutes
-  module AttributeCompiler
+  [ManagerAccess]
+  class AttributeCompilerClass
   {
     compile_expr (env : GlobalEnv, ti : TypeBuilder, allow_rec : bool, 
                   expr : PT.PExpr) : object * MType
@@ -299,6 +299,7 @@
 
     internal MakeEmittedAttribute (attr_type : System.Type) : SR.Emit.CustomAttributeBuilder
     {
+      _ = this; // shut up!
       def constructor_info = attr_type.GetConstructor (System.Type.EmptyTypes);
       SR.Emit.CustomAttributeBuilder (constructor_info, array [])
     }
@@ -310,6 +311,7 @@
 
     internal MakeEmittedAttribute (attr_type : System.Type, param_types : array [System.Type], value : object) : SR.Emit.CustomAttributeBuilder
     {
+      _ = this; // shut up!
       def constructor_info = attr_type.GetConstructor (param_types);
       assert (constructor_info != null);
       def constructor_params = array [value];
@@ -424,6 +426,11 @@
       }
       loop (meth.GetModifiers ().GetCustomAttributes ())
     }
+
+    internal this (man : ManagerClass)
+    {
+      Manager = man; 
+    }
   }
 
   public partial class TypesManager
@@ -475,7 +482,7 @@
       
       foreach ((env, attr) in assembly_attributes) {
         /* store resolved attribute */
-        def (tc, parms) = AttributeCompiler.CheckAttribute (env, attr);
+        def (tc, parms) = Manager.AttributeCompiler.CheckAttribute (env, attr);
         
         def take_string (pars) {
           | [ <[ $(x : string) ]> ] => x
@@ -543,7 +550,7 @@
     {
       foreach (expr in custom_attrs) {
         try {
-          def error = adder (AttributeCompiler.CompileAttribute (ti.GlobalEnv, ti, expr));
+          def error = adder (ti.Manager.AttributeCompiler.CompileAttribute (ti.GlobalEnv, ti, expr));
           when (error != null)
             Message.Error ($"custom attribute $expr is not valid on " + error);
         } catch {
@@ -573,7 +580,7 @@
                                                0,
                                                $(concatenated : string)) 
             ]>;
-            def error = adder (AttributeCompiler.CompileAttribute (ti.GlobalEnv, ti, serialized));
+            def error = adder (ti.Manager.AttributeCompiler.CompileAttribute (ti.GlobalEnv, ti, serialized));
             when (error != null)
               Message.Error ($"macro attribute $name is not valid on " + error);
           }

Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n	(original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n	Wed May 24 18:53:21 2006
@@ -528,7 +528,7 @@
     
     // find our attribute
     foreach (expr in GetModifiers ().custom_attrs)
-      match (AttributeCompiler.ResolveAttribute (this.GlobalEnv, expr)) {
+      match (Manager.AttributeCompiler.ResolveAttribute (this.GlobalEnv, expr)) {
         | Some ((t, _)) =>
           when (looking_for.Equals (t))
             result = Some (expr)

Modified: nemerle/trunk/ncc/parsing/AST.n
==============================================================================
--- nemerle/trunk/ncc/parsing/AST.n	(original)
+++ nemerle/trunk/ncc/parsing/AST.n	Wed May 24 18:53:21 2006
@@ -367,6 +367,7 @@
 
     public GetInternalType () : MType
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       match (this) {
         | Literal.Void => InternalType.Void
         | Literal.Null => InternalType.Object
@@ -385,6 +386,7 @@
 
     public WithType (t : MType) : option [Literal]
     {
+      def InternalType = t.Manager.InternalType;
       match (this) {
         | Literal.Void => None ()
         | Literal.Null when t.CanBeNull
@@ -411,6 +413,7 @@
     
     public WithProperType () : Literal
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       match (this) {
         | Literal.Integer (0, true, _) => Literal.Integer (0, false, InternalType.Int32)
         | Literal.Integer (val, is_neg, _) =>
@@ -436,6 +439,7 @@
 
     public AsObject () : object
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       match (this) {
         | Literal.Void => assert (false)
         | Literal.Null => null
@@ -571,6 +575,7 @@
 
     public static FromInt (x : int) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       if (x == int.MinValue)
         Literal.Integer (0x80000000UL, true, InternalType.Int32)
       else
@@ -579,6 +584,7 @@
 
     public static FromSByte (x : sbyte) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       if (x == sbyte.MinValue)
         Literal.Integer (0x80UL, true, InternalType.SByte)
       else
@@ -587,11 +593,13 @@
 
     public static FromByte (x : byte) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       Literal.Integer (x, false, InternalType.Byte)
     }
 
     public static FromShort (x : short) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       if (x == short.MinValue)
         Literal.Integer (0x8000UL, true, InternalType.Int16)
       else
@@ -600,16 +608,19 @@
 
     public static FromUShort (x : ushort) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       Literal.Integer (x, false, InternalType.UInt16)
     }
 
     public static FromUInt (x : uint) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       Literal.Integer (x, false, InternalType.UInt32)
     }
 
     public static FromLong (x : long) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       if (x == long.MinValue)
         Literal.Integer (0x8000000000000000UL, true, InternalType.Int64)
       else
@@ -618,6 +629,7 @@
 
     public static FromULong (x : ulong) : Literal.Integer
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       Literal.Integer (x, false, InternalType.UInt64)
     }
 

Modified: nemerle/trunk/ncc/passes.n
==============================================================================
--- nemerle/trunk/ncc/passes.n	(original)
+++ nemerle/trunk/ncc/passes.n	Wed May 24 18:53:21 2006
@@ -31,15 +31,13 @@
 
 namespace Nemerle.Compiler 
 {
-  public class InternalTypeClass {}
-  public class SystemTypeClass {}
-
   public class ManagerClass 
   {
     public static mutable Instance : ManagerClass;
 
     public SystemTypeCache : SystemTypeClass;
     public InternalType : InternalTypeClass;
+    internal AttributeCompiler : AttributeCompilerClass;
 
     internal mutable Solver : Solver;
     public mutable Hierarchy : TypesManager;
@@ -65,6 +63,9 @@
       def scanner = ScanTypeHierarchy (this);
       ScanningPipeline = scanner.ProcessDeclaration;
       this.Options = options;
+      InternalType = InternalTypeClass (this);
+      SystemTypeCache = SystemTypeClass (this);
+      AttributeCompiler = AttributeCompilerClass (this);
     }
     
     

Modified: nemerle/trunk/ncc/typing/ConstantFolder.n
==============================================================================
--- nemerle/trunk/ncc/typing/ConstantFolder.n	(original)
+++ nemerle/trunk/ncc/typing/ConstantFolder.n	Wed May 24 18:53:21 2006
@@ -36,6 +36,7 @@
 namespace Nemerle.Compiler 
 {
   // this module is stateless
+  [ManagerAccess (ManagerClass.Instance)]
   public module ConstantFolder
   {
     internal is_known_operator (name : string) : bool

Modified: nemerle/trunk/ncc/typing/DecisionTreeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/typing/DecisionTreeBuilder.n	(original)
+++ nemerle/trunk/ncc/typing/DecisionTreeBuilder.n	Wed May 24 18:53:21 2006
@@ -78,6 +78,7 @@
 
 namespace Nemerle.Compiler
 {
+  [ManagerAccess]
   class DecisionTreeBuilder
   {
 
@@ -131,6 +132,7 @@
       */
       static FindValueExcept (cons : list [Con], throw_ignore = false) : string
       {
+        def InternalType = ManagerClass.Instance.InternalType;
         match (cons) {
           | [] => "_"
           | Lit (Literal.Bool (true)) :: _ => "false"
@@ -661,7 +663,7 @@
                 // change tuple to record
                 | Pattern.Tuple (pats) =>
                   mutable id = 0;
-                  def tt = InternalType.GetTupleType (pats.Length);
+                  def tt = ManagerClass.Instance.InternalType.GetTupleType (pats.Length);
                   def pats' =
                     pats.Map (fun (pat) { ++id; (tt.GetField (id), pat) });
                   def pat =
@@ -836,6 +838,7 @@
       
       foreach (case in cases)
         foreach ((pat, guard, _) in case.patterns) {
+          Manager = pat.Type.Manager;
           def no_guard = guard is TExpr.Literal (Literal.Bool (true));
           patterns = (pat, ! no_guard, no) :: patterns;
           ++no;

Modified: nemerle/trunk/ncc/typing/MType.n
==============================================================================
--- nemerle/trunk/ncc/typing/MType.n	(original)
+++ nemerle/trunk/ncc/typing/MType.n	Wed May 24 18:53:21 2006
@@ -573,7 +573,7 @@
       def from =
         match (parms) {
           | [x] => x
-          | [] => InternalType.Void
+          | [] => ManagerClass.Instance.InternalType.Void
           | lst => MType.Tuple (lst)
         }
 

Modified: nemerle/trunk/ncc/typing/OverloadPossibility.n
==============================================================================
--- nemerle/trunk/ncc/typing/OverloadPossibility.n	(original)
+++ nemerle/trunk/ncc/typing/OverloadPossibility.n	Wed May 24 18:53:21 2006
@@ -34,6 +34,7 @@
 {
   /** Represents a single possibility in the overloading resulution process.
       It is used in the TExpr.Overloaded node.  */
+  [ManagerAccess (solver.Manager)]
   public class OverloadPossibility : Located
   {
     /** Tell if this overload is still possible in the current solver.  */
@@ -232,11 +233,6 @@
     mutable formal_types : array [TyVar];
     mutable did_mambo_jumbo : bool;
 
-    public Manager : ManagerClass
-    {
-      get { solver.Manager }
-    }
-
     public ResetOverloadSelectionStuff () : void
     {
       permutation_array = null;

Modified: nemerle/trunk/ncc/typing/Subst.n
==============================================================================
--- nemerle/trunk/ncc/typing/Subst.n	(original)
+++ nemerle/trunk/ncc/typing/Subst.n	Wed May 24 18:53:21 2006
@@ -206,7 +206,7 @@
           });
 
         List.Iter2 (vars, vars', fun (v : StaticTyVar, tv : TyVar) {
-          when (!v.LowerBound.Equals (InternalType.Object)) {
+          when (!v.LowerBound.Equals (ManagerClass.Instance.InternalType.Object)) {
             def ok = tv.Require (res.Apply (v.LowerBound));
             Util.cassert (was_error || ok, $ "req fail, $tv $(res.Apply (v.LowerBound))");
           }

Modified: nemerle/trunk/ncc/typing/TypedTree.n
==============================================================================
--- nemerle/trunk/ncc/typing/TypedTree.n	(original)
+++ nemerle/trunk/ncc/typing/TypedTree.n	Wed May 24 18:53:21 2006
@@ -634,6 +634,7 @@
     {
       get {
         when (ty == null) {
+          def InternalType = ManagerClass.Instance.InternalType;
           match (this) {
             | Throw
             | Goto
@@ -1002,6 +1003,7 @@
     public static BoolLiteral (val : bool) : TExpr
     {
       when (true_literal == null) {
+        def InternalType = ManagerClass.Instance.InternalType;
         false_literal = 
           TExpr.Literal (InternalType.Boolean,
                          Nemerle.Compiler.Literal.Bool (false));

Modified: nemerle/trunk/ncc/typing/Typer-CallTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-CallTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-CallTyper.n	Wed May 24 18:53:21 2006
@@ -40,6 +40,7 @@
 {
   public partial class Typer
   {
+    [ManagerAccess (typer.Manager)]
     class CallTyper {
       function_called : TExpr;
       mutable call_parms : list [Parm];

Modified: nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-DelayedTyping.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-DelayedTyping.n	Wed May 24 18:53:21 2006
@@ -73,6 +73,7 @@
 
     
     // TODO: object model seems to fit better here, upgrade most kinds to use DelayedAction
+    [ManagerAccess (typer.Manager)]
     public class DelayedTyping : Located, Nemerle.IComparable [DelayedTyping]
     {
       id : int;
@@ -100,12 +101,6 @@
       }
 
 
-      public Manager : ManagerClass
-      {
-        get { typer.Manager }
-      }
-      
-
       public CompareTo (o : DelayedTyping) : int
       {
         id - o.id

Modified: nemerle/trunk/ncc/typing/Typer-PatternTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-PatternTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-PatternTyper.n	Wed May 24 18:53:21 2006
@@ -150,6 +150,7 @@
 
   public partial class Typer
   {
+    [ManagerAccess (typer.Manager)]
     class PatternTyper
     {
       typer : Typer;

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Wed May 24 18:53:21 2006
@@ -690,6 +690,7 @@
 
     static internal VoidLiteral () : TExpr
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       TExpr.Literal (InternalType.Void, Literal.Void ())
     }
 
@@ -819,6 +820,7 @@
 
     static internal LiteralConversionPossible (lit : Literal, target : MType) : bool
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       match (lit) {
         | Literal.Integer (res, is_negative, _) =>
           if (target.Equals (InternalType.UInt64))
@@ -1834,6 +1836,7 @@
 
     static internal TypeOfLiteral (l : Literal) : TyVar
     {
+      def InternalType = ManagerClass.Instance.InternalType;
       def mono_type =
         match (l) {
           | Literal.Null => null

Modified: nemerle/trunk/ncc/typing/Typer2.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer2.n	(original)
+++ nemerle/trunk/ncc/typing/Typer2.n	Wed May 24 18:53:21 2006
@@ -548,7 +548,7 @@
     }
 
 
-    static VoidIfNull (expr : TExpr) : TExpr
+    VoidIfNull (expr : TExpr) : TExpr
     {
       if (expr == null)
         TExpr.Literal (InternalType.Void, Literal.Void ())



More information about the svn mailing list