[svn] r6303: nemerle/trunk: lib/tests/Makefile macros/core.n ncc/CompilationOptions.n ncc/completion/CodeC...

nazgul svnadmin at nemerle.org
Wed May 17 23:07:30 CEST 2006


Log:
Refactor LibraryReferenceManager into a normal class

Author: nazgul
Date: Wed May 17 23:07:24 2006
New Revision: 6303

Modified:
   nemerle/trunk/lib/tests/Makefile
   nemerle/trunk/macros/core.n
   nemerle/trunk/ncc/CompilationOptions.n
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/external/LibrariesLoader.n
   nemerle/trunk/ncc/hierarchy/ClassMembers.n
   nemerle/trunk/ncc/hierarchy/NamespaceTree.n
   nemerle/trunk/ncc/main.n
   nemerle/trunk/ncc/passes.n
   nemerle/trunk/ncc/typing/Typer.n

Modified: nemerle/trunk/lib/tests/Makefile
==============================================================================
--- nemerle/trunk/lib/tests/Makefile	(original)
+++ nemerle/trunk/lib/tests/Makefile	Wed May 17 23:07:24 2006
@@ -5,6 +5,7 @@
 EXECUTE = $(NET_ENGINE) $(NET_FLAGS)
 THISDIR = $(shell if cygpath --help 2>/dev/null 1>&2; then echo `cygpath -m $(CURDIR)`; else echo $(CURDIR); fi)
 UNIT_SRC = linkedlist.n list.n heap.n set.n
+NUNIT_LIB = -pkg:/home/morgul/programs/local/lib/pkgconfig/mono-nunit.pc
 
 ############################################################
 # TARGETS

Modified: nemerle/trunk/macros/core.n
==============================================================================
--- nemerle/trunk/macros/core.n	(original)
+++ nemerle/trunk/macros/core.n	Wed May 17 23:07:24 2006
@@ -710,7 +710,7 @@
      else {
        add_attr (tb.GetModifiers ());
        add_attr (mb.GetModifiers ());
-       LibraryReferenceManager.AddExtensionMethod (mb);
+       mb.AddAsExtensionMethod ();
      }
    }
 }

Modified: nemerle/trunk/ncc/CompilationOptions.n
==============================================================================
--- nemerle/trunk/ncc/CompilationOptions.n	(original)
+++ nemerle/trunk/ncc/CompilationOptions.n	Wed May 17 23:07:24 2006
@@ -64,6 +64,7 @@
     public mutable LinkedResources : list [string];
     public mutable EmbeddedResources : list [string];
     public mutable ReferencedLibraries : list [string];
+    public mutable LibraryPaths : list[string];
     public mutable MacrosToLoad    : list [string];
     public mutable Sources : list [string];
 
@@ -123,6 +124,7 @@
       LinkedResources = [];
       EmbeddedResources = [];
       ReferencedLibraries = [];
+      LibraryPaths = [];
       MacrosToLoad = [];
       Sources = [];
       disabled_keywords.Clear ();
@@ -339,7 +341,7 @@
         Getopt.CliOption.String (name = "-library-path",
                        aliases = ["-lib", "-L"],
                        help = "Add specified directory to library search path",
-                       handler = LibraryReferenceManager.AddSearchDirectory),
+                       handler = fun (s) { Options.LibraryPaths ::= s }),
 
         Getopt.CliOption.String (name = "-define",
                        aliases = ["-d", "-def"],

Modified: nemerle/trunk/ncc/completion/CodeCompletionEngine.n
==============================================================================
--- nemerle/trunk/ncc/completion/CodeCompletionEngine.n	(original)
+++ nemerle/trunk/ncc/completion/CodeCompletionEngine.n	Wed May 17 23:07:24 2006
@@ -218,7 +218,7 @@
                 Message.InitOutput (textWriter);
             MacroColorizer.Clear ();
             MacroRegistry.Init ();
-            LibraryReferenceManager.Init ();     
+            Passes.LibrariesManager = LibraryReferenceManager (Options.LibraryPaths);     
             NamespaceTree.Init ();
             NamespaceTree.namespace_tree.Clear ();
             Util.Init ();
@@ -231,13 +231,13 @@
             Options.ColorMessages = false;
             Options.IgnoreConfusion = true;
             
-            LibraryReferenceManager.AddLibrary ("mscorlib");
-            LibraryReferenceManager.AddLibrary ("System");
-            LibraryReferenceManager.AddLibrary ("Nemerle");
+            Passes.LibrariesManager.AddLibrary ("mscorlib");
+            Passes.LibrariesManager.AddLibrary ("System");
+            Passes.LibrariesManager.AddLibrary ("Nemerle");
             SystemType.Init ();                 
             InternalType.InitSystemTypes ();
             InternalType.InitNemerleTypes ();
-            LibraryReferenceManager.LoadMacrosFrom ("Nemerle.Macros");
+            Passes.LibrariesManager.LoadMacrosFrom ("Nemerle.Macros");
             Sources.set_unparsed_state ();
             
             GlobalEnv.Init();
@@ -247,7 +247,7 @@
         
         public LesserInit() : void
         {
-            LibraryReferenceManager.Init ();     
+            Passes.LibrariesManager = LibraryReferenceManager (Options.LibraryPaths);
             NamespaceTree.Init ();
             Util.Init ();
             AttributeCompiler.Init ();
@@ -569,8 +569,8 @@
             
                 foreach (references in References.references.Values)
                 {
-                | Library as l => LibraryReferenceManager.AddLibrary (l.path);
-                | Assembly as a => LibraryReferenceManager.AddAssembly (a.assembly);
+                | Library as l => Passes.LibrariesManager.AddLibrary (l.path);
+                | Assembly as a => Passes.LibrariesManager.AddAssembly (a.assembly);
                 }
     
                 System.Console.WriteLine ("just before lexing");

Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n	(original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n	Wed May 17 23:07:24 2006
@@ -51,43 +51,30 @@
   /**
    * Manager for the referenced libraries
    */
-  public module LibraryReferenceManager
+  class LibraryReferenceManager
   {
     /* -- CONSTRUCTORS ----------------------------------------------------- */
   
     /**
-     * Static constructor. Always load the Framework core library.
+     * constructor. Always load the Framework core library.
      */
-    this () {
+    public this ([Nemerle.Assertions.NotNull] lib_paths : list [string]) {
       def assembly_dir (t) {
         DirectoryOfCodebase (System.Uri(t.Assembly.CodeBase).LocalPath);
       };
       
       // include current directory and directories where 
       // mscorlib.dll, System.dll and Nemerle.dll reside
-      _lib_path = [System.Environment.CurrentDirectory,
-                   assembly_dir (typeof (Nemerle.Core.AssertionException)),
-                   assembly_dir (typeof (System.Text.RegularExpressions.Match)),
-                   assembly_dir (typeof (LibraryReferenceManager)),                    
-                   assembly_dir (typeof (System.Object))];
+      _lib_path = System.Environment.CurrentDirectory ::
+                  assembly_dir (typeof (Nemerle.Core.AssertionException)) ::
+                  assembly_dir (typeof (System.Text.RegularExpressions.Match)) ::
+                  assembly_dir (typeof (LibraryReferenceManager)) ::
+                  assembly_dir (typeof (System.Object)) :: lib_paths;
     }
 
 
     /* -- PUBLIC METHODS --------------------------------------------------- */
 
-    public Init () : void
-    {
-      namespace_nodes.Clear ();
-      unless (Options.PersistentLibraries) {
-        _loaded_assemblies_by_name.Clear ();
-        _assemblies_loaded_by_hand.Clear ();
-        AllowLoadingExtensions = false;
-      }
-      _construct_right_away = [];
-      _extension_methods.Clear ();
-    }
-
-  
     /**
      * Stores the referenced library for later lookup by the namespaces. Also
      * add transitive closure of libraries needed by given assembly.
@@ -120,7 +107,7 @@
     public AddAssembly (assembly : SR.Assembly) : void
     {
       unless (_loaded_assemblies_by_name.Contains (assembly.FullName)) {
-        _ = LibraryReference (assembly);
+        _ = LibraryReference (this, assembly);
         when (AllowLoadingExtensions)
           LoadExtensions ();
         _loaded_assemblies_by_name.Set (assembly.FullName, assembly);
@@ -145,11 +132,6 @@
       }
     }
       
-    public AddSearchDirectory (name : string) : void
-    {
-      _lib_path = name :: _lib_path;
-    }
-
     public GetExtensionMethods (name : string, env : GlobalEnv) : list [IMethod]
     {
       if (_extension_methods.Contains (name))
@@ -172,7 +154,7 @@
     /**
      * Remove assembly file name from URL returned by Assembly.CodeBase.
      */
-    public DirectoryOfCodebase (mutable path : string) : string
+    public static DirectoryOfCodebase (mutable path : string) : string
     {
       path = Path.GetDirectoryName (path);
 
@@ -314,7 +296,7 @@
     /**
      * List of directories we look for assemblies in.
      */
-    private mutable _lib_path : list [string];
+    private _lib_path : list [string];
 
     private _loaded_assemblies_by_name : Hashtable [string, SR.Assembly] = Hashtable (20);
     
@@ -337,20 +319,6 @@
       _construct_right_away = [];
     }
 
-    [Record]
-    public class ExternalType {
-      internal system_type : System.Type;
-      internal library : LibraryReference;
-      internal mutable tycon : TypeInfo;
-
-      internal ConstructTypeInfo (node : NamespaceTree.Node, fix_node : bool) : void {
-        when (tycon == null)
-          tycon = library.ConstructTypeInfo (system_type, node);
-        when (fix_node)
-          node.Value = NamespaceTree.TypeInfoCache.Cached (tycon);
-      }
-    }
-
     internal LoadTypesFrom (lib : LibraryReference) : void
     {
       def assembly = lib.GetAssembly ();
@@ -398,7 +366,7 @@
       }
     }
 
-    internal CacheTypeInfo (t : System.Type, tc : TypeInfo, node : NamespaceTree.Node) : void
+    internal static CacheTypeInfo (t : System.Type, tc : TypeInfo, node : NamespaceTree.Node) : void
     {
       match (node.Value) {
         | NamespaceTree.TypeInfoCache.NotLoaded (e) =>
@@ -425,7 +393,7 @@
       }
     }
 
-    internal GetInternalType (lib : LibraryReference, t : System.Type,
+    internal static GetInternalType (lib : LibraryReference, t : System.Type,
                               node : NamespaceTree.Node) : TypeInfo
     {
       match (node.Value) {
@@ -484,6 +452,20 @@
   }
 
 
+  [Record]
+  public class ExternalType {
+    internal system_type : System.Type;
+    internal library : LibraryReference;
+    internal mutable tycon : TypeInfo;
+
+    internal ConstructTypeInfo (node : NamespaceTree.Node, fix_node : bool) : void {
+      when (tycon == null)
+        tycon = library.ConstructTypeInfo (system_type, node);
+      when (fix_node)
+        node.Value = NamespaceTree.TypeInfoCache.Cached (tycon);
+    }
+  }
+
   /**
    * This class stores information extracted from a referenced external library.
    */
@@ -506,14 +488,17 @@
     internal mutable _is_generated_by_nemerle : bool;
 
 
+    internal Manager : LibraryReferenceManager;
+
     // a little hack to prevent AddBuildins() calling in NetType
     internal static mutable add_buildins : bool = false;
     
     /**
      * Load an assembly. Extracts and processes the custom attributes array.
      */
-    public this (assembly : SR.Assembly) 
+    internal this (mgr : LibraryReferenceManager, assembly : SR.Assembly) 
     {
+      Manager = mgr;
       _library = assembly;
       _location = Location (Location.GetFileIndex (assembly.Location), 0, 0);
 
@@ -522,8 +507,8 @@
                _library.GetCustomAttributes (typeof (SR.AssemblyConfigurationAttribute), false))
         _is_generated_by_nemerle = _is_generated_by_nemerle || x.Configuration == "ContainsNemerleTypes";
 
-      LibraryReferenceManager.LoadTypesFrom (this);
-      LibraryReferenceManager.LoadMacrosFrom (_library);
+      Manager.LoadTypesFrom (this);
+      Manager.LoadMacrosFrom (_library);
     }
 
 
@@ -587,7 +572,7 @@
     internal TypeInfoOfType (framework_type : System.Type) : TypeInfo
     {
       def (ns_node, path_to_type) =
-        LibraryReferenceManager.framework_nesting (framework_type);
+        Manager.framework_nesting (framework_type);
       def ns_node = ns_node.Path (path_to_type);
 
       match (ns_node.LookupType ([], framework_type.GetGenericArguments ().Length)) {
@@ -628,7 +613,7 @@
       if (st == null)
         None ()
       else {
-        def (ns_node, path_to_type) = LibraryReferenceManager.framework_nesting (st);
+        def (ns_node, path_to_type) = Manager.framework_nesting (st);
         def ns = ns_node.Path (path_to_type);
         Some (LibraryReferenceManager.GetInternalType (this, st, ns))
       }
@@ -719,8 +704,8 @@
         when (LibraryReference.add_buildins) AddBuiltins ();
 //        else Message.Debug ($"omiititng $FullName");
 
-        decode_extension_methods (SystemType.ExtensionAttribute);
-        decode_extension_methods (SystemType.SQ_ExtensionAttribute);
+        decode_extension_methods (lib.Manager, SystemType.ExtensionAttribute);
+        decode_extension_methods (lib.Manager, SystemType.SQ_ExtensionAttribute);
       }
 
       #region Special numeric overloads
@@ -1333,13 +1318,13 @@
         }
       }
 
-      decode_extension_methods (t : System.Type) : void
+      decode_extension_methods (mgr : LibraryReferenceManager, t : System.Type) : void
       {
         when (t != null) {
           when (system_type.IsDefined (t, false)) {
             foreach (m is IMethod in GetMembers ())
               when (m.IsStatic && m.GetHandle ().IsDefined (t, false))
-                LibraryReferenceManager.AddExtensionMethod (m);
+                mgr.AddExtensionMethod (m);
           }
         }
       }

Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n	(original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n	Wed May 17 23:07:24 2006
@@ -1030,6 +1030,10 @@
     check_method_like_attributes ("method", "methods");
   }
       
+  public AddAsExtensionMethod () : void
+  {
+    Passes.LibrariesManager.AddExtensionMethod (this);
+  }
       
   public BuiltinKind : BuiltinMethodKind
   {

Modified: nemerle/trunk/ncc/hierarchy/NamespaceTree.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/NamespaceTree.n	(original)
+++ nemerle/trunk/ncc/hierarchy/NamespaceTree.n	Wed May 17 23:07:24 2006
@@ -41,8 +41,8 @@
       | No
       | Cached { tycon : TypeInfo; }
       | CachedAmbiguous { elems : list [TypeInfo] }
-      | NotLoaded { e : LibraryReferenceManager.ExternalType; }
-      | NotLoadedList { elems : list [LibraryReferenceManager.ExternalType] }        
+      | NotLoaded { e : ExternalType; }
+      | NotLoadedList { elems : list [ExternalType] }        
       | MacroCall { m : IMacro; }
       | NamespaceReference
     }

Modified: nemerle/trunk/ncc/main.n
==============================================================================
--- nemerle/trunk/ncc/main.n	(original)
+++ nemerle/trunk/ncc/main.n	Wed May 17 23:07:24 2006
@@ -74,9 +74,7 @@
     main_with_catching () : void
     {
       try {
-        def this_dir = System.Uri (typeof (MainClass).Assembly.CodeBase).LocalPath;
-        LibraryReferenceManager.AddSearchDirectory
-          (LibraryReferenceManager.DirectoryOfCodebase (this_dir));
+        Options.LibraryPaths ::= System.Uri (typeof (MainClass).Assembly.CodeBase).LocalPath;
         
         // run compilation with already created options
         Passes.Run ()

Modified: nemerle/trunk/ncc/passes.n
==============================================================================
--- nemerle/trunk/ncc/passes.n	(original)
+++ nemerle/trunk/ncc/passes.n	Wed May 17 23:07:24 2006
@@ -35,6 +35,7 @@
   {
     internal mutable Solver : Solver;
     public mutable Hierarchy : TypesManager;
+    internal mutable LibrariesManager : LibraryReferenceManager;
 
     internal mutable tyinfo_counter : int;
     mutable current_tyinfo_count : int;
@@ -123,7 +124,7 @@
       MacroColorizer.Clear ();
       Location.Init ();
       MacroRegistry.Init ();
-      LibraryReferenceManager.Init ();     
+      LibrariesManager = LibraryReferenceManager (Options.LibraryPaths);     
       NamespaceTree.Init ();
       Util.Init ();
       AttributeCompiler.Init ();
@@ -156,27 +157,26 @@
     
     internal LoadExternalLibraries () : void {
       unless (Options.DoNotLoadStdlib) {
-        LibraryReferenceManager.AddLibrary ("mscorlib");
-        LibraryReferenceManager.AddLibrary ("System");
-        LibraryReferenceManager.AddLibrary ("Nemerle");
-        LibraryReferenceManager.AddLibrary ("System.Xml");
+        LibrariesManager.AddLibrary ("mscorlib");
+        LibrariesManager.AddLibrary ("System");
+        LibrariesManager.AddLibrary ("Nemerle");
+        LibrariesManager.AddLibrary ("System.Xml");
       };
      
-      List.Iter (List.Rev (Options.ReferencedLibraries), 
-                 LibraryReferenceManager.AddLibrary);
+      Options.ReferencedLibraries.Reverse().Iter (LibrariesManager.AddLibrary);
 
       foreach (file in Options.MacrosToLoad.Reverse())
-        LibraryReferenceManager.LoadMacrosFrom (file);
+        LibrariesManager.LoadMacrosFrom (file);
 
       when (! Options.PersistentLibraries || InternalType.Void == null) {
         SystemType.Init ();                 
         InternalType.InitSystemTypes ();
         unless (Options.DoNotLoadStdlib) InternalType.InitNemerleTypes ();
-        LibraryReferenceManager.LoadExtensions ();
-        LibraryReferenceManager.AllowLoadingExtensions = true;
+        LibrariesManager.LoadExtensions ();
+        LibrariesManager.AllowLoadingExtensions = true;
 
         unless (Options.DoNotLoadMacros)
-          LibraryReferenceManager.LoadMacrosFrom ("Nemerle.Macros");
+          LibrariesManager.LoadMacrosFrom ("Nemerle.Macros");
       }
 
       // this is because we store macro syntax inside GlobalEnv

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Wed May 17 23:07:24 2006
@@ -2343,7 +2343,7 @@
           lookup (possible_type);
         }
 
-        foreach (meth in LibraryReferenceManager.GetExtensionMethods (name.Id, name.GetEnv (env)))
+        foreach (meth in Passes.LibrariesManager.GetExtensionMethods (name.Id, name.GetEnv (env)))
           foreach (over in ConstructMethodOverload (meth, maybe_varargs = true)) {
             over.ExtensionMethodObject = obj;
             res ::= over;



More information about the svn mailing list