[svn] r6205: nemerle/trunk/ncc: external/LibrariesLoader.n generation/HierarchyEmitter.n

malekith svnadmin at nemerle.org
Fri Apr 28 00:39:48 CEST 2006


Log:
Use a proper way of finding out superclass in NetType. Add a hack to prevent saving S.Array as supertype in assembly, but pretend it was saved this way. Should fix MS.NET build.

Author: malekith
Date: Fri Apr 28 00:39:47 2006
New Revision: 6205

Modified:
   nemerle/trunk/ncc/external/LibrariesLoader.n
   nemerle/trunk/ncc/generation/HierarchyEmitter.n

Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n	(original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n	Fri Apr 28 00:39:47 2006
@@ -625,6 +625,11 @@
         (typarms, tenv, direct_supertypes, supertypes) =
           TyCodec.ReflectTypeBuilder (library, tenv, system_type);
 
+        when (h.Namespace == "Nemerle.Builtins" && h.Name.StartsWith ("Array")) {
+          direct_supertypes = [InternalType.Array];
+          supertypes ::= InternalType.Array;
+        }
+
         foreach (t in supertypes)
           supertype_map = supertype_map.Add (t.tycon, t);
 
@@ -1078,13 +1083,13 @@
         }
       }
       
-      [Nemerle.Memoize (InvalidValue = null)]
       public override SuperClass () : option [TypeInfo]
       {
-        if (system_type.BaseType == null)
-          None ()
-        else                                    
-          Some (library.TypeInfoOfType (system_type.BaseType))
+        match (direct_supertypes) {
+          | MType.Class (tc, _) :: _ => Some (tc)
+          | [] => None ()
+          | _ => Util.ice ()
+        }
       }
 
       public override GetMembers () : list [IMember]

Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n	Fri Apr 28 00:39:47 2006
@@ -607,8 +607,12 @@
         def (extends_class, implements_interfaces) = determine_inheritance ();
 
         // save inheritance information in our type builder
-        when (extends_class != null)
+        when (extends_class != null) {
+          if (FullName.StartsWith ("Nemerle.Builtins.Array"))
+            type_builder.SetParent (SystemType.Object);
+          else
           type_builder.SetParent (extends_class);
+        }
 
         foreach (inter in implements_interfaces) 
           type_builder.AddInterfaceImplementation (inter);



More information about the svn mailing list