[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