[svn] r6579: nemerle/trunk/ncc: external/InternalTypes.n
external/LibrariesLoader.n passes.n
VladD2
svnadmin at nemerle.org
Sat Aug 26 15:28:12 CEST 2006
Log:
Fix loading extension methods from external assemblies.
Author: VladD2
Date: Sat Aug 26 15:28:05 2006
New Revision: 6579
Modified:
nemerle/trunk/ncc/external/InternalTypes.n
nemerle/trunk/ncc/external/LibrariesLoader.n
nemerle/trunk/ncc/passes.n
Modified: nemerle/trunk/ncc/external/InternalTypes.n
==============================================================================
--- nemerle/trunk/ncc/external/InternalTypes.n (original)
+++ nemerle/trunk/ncc/external/InternalTypes.n Sat Aug 26 15:28:05 2006
@@ -72,8 +72,6 @@
public mutable ParamArrayAttribute : System.Type;
// set in LibrariesLoader upon first possiblity
- public mutable ExtensionAttribute : System.Type;
- public mutable SQ_ExtensionAttribute : System.Type;
public mutable Decimal_ctors : Hashtable [string, SR.ConstructorInfo];
public mutable Type_GetTypeFromHandle : SR.MethodInfo;
@@ -395,7 +393,6 @@
public mutable TypeAttribute_tc : TypeInfo;
public mutable VariantAttribute_tc : TypeInfo;
public mutable ImmutableAttribute_tc : TypeInfo;
- public mutable ExtensionAttribute_tc : TypeInfo;
public mutable TypeAliasAttribute_tc : TypeInfo;
public mutable VariantOptionAttribute_tc : TypeInfo;
public mutable VolatileModifier_tc : TypeInfo;
@@ -644,7 +641,6 @@
InternalType.VariantOptionAttribute_tc = lookup ("Nemerle.Internal.VariantOptionAttribute");
InternalType.VolatileModifier_tc = lookup ("Nemerle.Internal.VolatileModifier");
InternalType.ImmutableAttribute_tc = lookup ("Nemerle.Internal.ImmutableAttribute");
- InternalType.ExtensionAttribute_tc = lookup ("Nemerle.Internal.ExtensionAttribute");
InternalType.ConstantVariantOptionAttribute_tc = lookup ("Nemerle.Internal.ConstantVariantOptionAttribute");
InternalType.ExtensionPatternEncodingAttribute_tc = lookup ("Nemerle.Internal.ExtensionPatternEncodingAttribute");
Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n (original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n Sat Aug 26 15:28:05 2006
@@ -355,11 +355,6 @@
def assembly = lib.GetAssembly ();
def types = assembly.GetExportedTypes ();
- when (SystemTypeCache.ExtensionAttribute == null)
- SystemTypeCache.ExtensionAttribute = assembly.GetType ("Nemerle.Internal.ExtensionAttribute");
- when (SystemTypeCache.SQ_ExtensionAttribute == null)
- SystemTypeCache.SQ_ExtensionAttribute = assembly.GetType ("System.Runtime.CompilerServices.ExtensionAttribute");
-
mutable i = 0;
for (; i < types.Length; ++i) {
def t = types[i];
@@ -368,13 +363,9 @@
def e = ExternalType (t, lib, null);
def (ns_node, path_to_type) = framework_nesting (t);
-
def mainnode = ns_node.Path (path_to_type);
- when (SystemTypeCache.ExtensionAttribute != null &&
- t.IsDefined (SystemTypeCache.ExtensionAttribute, false) ||
- SystemTypeCache.SQ_ExtensionAttribute != null &&
- t.IsDefined (SystemTypeCache.SQ_ExtensionAttribute, false))
+ when (IsExtension (t))
_construct_right_away ::= mainnode;
mutable tinfo_cache = null;
@@ -397,6 +388,13 @@
}
}
+ public static IsExtension (attrsProvider : System.Reflection.ICustomAttributeProvider) : bool
+ {
+ def attrs = attrsProvider.GetCustomAttributes(false);
+ NArray.Exists(attrs, attr => attr.GetType().Name == "ExtensionAttribute")
+ }
+
+
internal static CacheTypeInfo (t : System.Type, tc : TypeInfo, node : NamespaceTree.Node) : void
{
match (node.Value) {
@@ -737,8 +735,7 @@
when (lib.LibRefManager.add_buildins) AddBuiltins ();
// else Message.Debug ($"omiititng $FullName");
- decode_extension_methods (lib.LibRefManager, SystemTypeCache.ExtensionAttribute);
- decode_extension_methods (lib.LibRefManager, SystemTypeCache.SQ_ExtensionAttribute);
+ decode_extension_methods (lib.LibRefManager);
when (InternalType.Obsolete_tc != null)
is_obsolete = HasAttribute (InternalType.Obsolete_tc);
@@ -1340,16 +1337,13 @@
}
}
- decode_extension_methods (mgr : LibraryReferenceManager, t : System.Type) : void
+ decode_extension_methods (mgr : LibraryReferenceManager) : void
{
- when (t != null) {
- when (system_type.IsDefined (t, false)) {
+ when (LibraryReferenceManager.IsExtension (system_type))
foreach (m is IMethod in GetMembers ())
- when (m.IsStatic && m.GetHandle ().IsDefined (t, false))
+ when (m.IsStatic && LibraryReferenceManager.IsExtension (m.GetHandle ()))
mgr.AddExtensionMethod (m);
}
- }
- }
internal override GetObsoletionDetails () : string * bool
{
Modified: nemerle/trunk/ncc/passes.n
==============================================================================
--- nemerle/trunk/ncc/passes.n (original)
+++ nemerle/trunk/ncc/passes.n Sat Aug 26 15:28:05 2006
@@ -358,7 +358,8 @@
LibrariesManager.AddLibrary ("System.Xml");
};
- Options.ReferencedLibraries.Reverse().Iter (LibrariesManager.AddLibrary);
+ foreach (lib in Options.ReferencedLibraries.Reverse())
+ LibrariesManager.AddLibrary (lib);
foreach (file in Options.MacrosToLoad.Reverse())
LibrariesManager.LoadMacrosFrom (file);
@@ -369,6 +370,7 @@
LibrariesManager.LoadExtensions ();
LibrariesManager.AllowLoadingExtensions = true;
+
unless (Options.DoNotLoadMacros)
LibrariesManager.LoadMacrosFrom ("Nemerle.Macros");
More information about the svn
mailing list