X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fgmcs%2Frootcontext.cs;h=8239ea423f62ddf47cf6c36d71a962b28488cf28;hb=17e12ece4b15c2a1b677ef6a4c7b71bff08b3354;hp=ab402a29c0e2bd6c928d51bd08fbdeb3ef493d92;hpb=e1029c24e4bed61664a649e01a5332d4e9f96dc6;p=mono.git diff --git a/mcs/gmcs/rootcontext.cs b/mcs/gmcs/rootcontext.cs index ab402a29c0e..8239ea423f6 100755 --- a/mcs/gmcs/rootcontext.cs +++ b/mcs/gmcs/rootcontext.cs @@ -46,7 +46,6 @@ namespace Mono.CSharp { // override). // static ArrayList type_container_resolve_order; - static ArrayList interface_resolve_order; static ArrayList attribute_types; // @@ -83,7 +82,6 @@ namespace Mono.CSharp { static RootContext () { tree = new Tree (); - interface_resolve_order = new ArrayList (); type_container_resolve_order = new ArrayList (); } @@ -101,11 +99,6 @@ namespace Mono.CSharp { static public string MainClass; - public static void RegisterOrder (Interface iface) - { - interface_resolve_order.Add (iface); - } - public static void RegisterOrder (TypeContainer tc) { type_container_resolve_order.Add (tc); @@ -310,7 +303,13 @@ namespace Mono.CSharp { "System.Runtime.Serialization.ISerializable", "System.Reflection.IReflect", - "System.Reflection.ICustomAttributeProvider" + "System.Reflection.ICustomAttributeProvider", + + // + // Generic types + // + "System.Collections.Generic.IEnumerator`1", + "System.Collections.Generic.IEnumerable`1" }; foreach (string iname in interfaces_first_stage) @@ -340,6 +339,7 @@ namespace Mono.CSharp { "System.Char", "System.Boolean", "System.Decimal", "System.Void", "System.RuntimeFieldHandle", + "System.RuntimeArgumentHandle", "System.RuntimeTypeHandle", "System.IntPtr", "System.TypedReference", @@ -381,6 +381,7 @@ namespace Mono.CSharp { "System.Runtime.InteropServices.StructLayoutAttribute", "System.Runtime.InteropServices.FieldOffsetAttribute", "System.InvalidOperationException", + "System.NotSupportedException", "System.MarshalByRefObject" }; @@ -419,9 +420,6 @@ namespace Mono.CSharp { foreach (TypeContainer tc in attribute_types) tc.CloseType (); - foreach (Interface iface in interface_resolve_order) - iface.CloseType (); - // // We do this in two passes, first we close the structs, // then the classes, because it seems the code needs it this @@ -429,13 +427,13 @@ namespace Mono.CSharp { // make sure that we define the structs in order as well. // foreach (TypeContainer tc in type_container_resolve_order){ - if (tc is Struct && tc.Parent == tree.Types){ + if (tc.Kind == Kind.Struct && tc.Parent == tree.Types){ tc.CloseType (); } } foreach (TypeContainer tc in type_container_resolve_order){ - if (!(tc is Struct && tc.Parent == tree.Types)) + if (!(tc.Kind == Kind.Struct && tc.Parent == tree.Types)) tc.CloseType (); } @@ -453,10 +451,9 @@ namespace Mono.CSharp { } attribute_types = null; - interface_resolve_order = null; type_container_resolve_order = null; helper_classes = null; - tree = null; + //tree = null; TypeManager.CleanUp (); } @@ -528,6 +525,8 @@ namespace Mono.CSharp { if (ds.Cache.Contains (name)){ t = (TypeExpr) ds.Cache [name]; + if (t != null) + return t; } else { // // For the case the type we are looking for is nested within this one @@ -555,13 +554,16 @@ namespace Mono.CSharp { } t = NamespaceLookup (ds, name, num_type_params, silent, loc); - ds.Cache [name] = t; + if (t != null){ + ds.Cache [name] = t; + return t; + } } - if (t == null && !silent) + if (!silent) Report.Error (246, loc, "Cannot find type `"+name+"'"); - return t; + return null; } // @@ -573,20 +575,6 @@ namespace Mono.CSharp { return LookupType (tc, name, true, loc); } - static public bool IsNamespace (string name) - { - Namespace ns; - - if (tree.Namespaces != null){ - ns = (Namespace) tree.Namespaces [name]; - - if (ns != null) - return true; - } - - return false; - } - static void Report1530 (Location loc) { Report.Error (1530, loc, "Keyword new not allowed for namespace elements"); @@ -597,7 +585,7 @@ namespace Mono.CSharp { DeclSpace ds = (DeclSpace) root.GetDefinition (name); ds.DefineMembers (root); - ds.Define (root); + ds.Define (); } static public void BootCorlib_PopulateCoreTypes () @@ -622,15 +610,6 @@ namespace Mono.CSharp { if (attribute_types != null) foreach (TypeContainer tc in attribute_types) tc.DefineMembers (root); - - if (interface_resolve_order != null){ - foreach (Interface iface in interface_resolve_order) - if ((iface.ModFlags & Modifiers.NEW) == 0) - iface.DefineMembers (root); - else - Report1530 (iface.Location); - } - if (type_container_resolve_order != null){ if (RootContext.StdLib){ @@ -697,14 +676,7 @@ namespace Mono.CSharp { if (attribute_types != null) foreach (TypeContainer tc in attribute_types) - tc.Define (root); - - if (interface_resolve_order != null){ - foreach (Interface iface in interface_resolve_order) - if ((iface.ModFlags & Modifiers.NEW) == 0) - iface.Define (root); - } - + tc.Define (); if (type_container_resolve_order != null){ foreach (TypeContainer tc in type_container_resolve_order) { @@ -717,7 +689,7 @@ namespace Mono.CSharp { continue; if ((tc.ModFlags & Modifiers.NEW) == 0) - tc.Define (root); + tc.Define (); } } @@ -725,14 +697,14 @@ namespace Mono.CSharp { if (delegates != null){ foreach (Delegate d in delegates) if ((d.ModFlags & Modifiers.NEW) == 0) - d.Define (root); + d.Define (); } ArrayList enums = root.Enums; if (enums != null){ foreach (Enum en in enums) if ((en.ModFlags & Modifiers.NEW) == 0) - en.Define (root); + en.Define (); } } @@ -740,32 +712,27 @@ namespace Mono.CSharp { { if (attribute_types != null) foreach (TypeContainer tc in attribute_types) - tc.Emit (); + tc.EmitType (); CodeGen.Assembly.Emit (Tree.Types); CodeGen.Module.Emit (Tree.Types); if (Tree.Types.Enums != null) { foreach (Enum e in Tree.Types.Enums) - e.Emit (Tree.Types); + e.Emit (); } - if (interface_resolve_order != null){ - foreach (Interface iface in interface_resolve_order) - iface.Emit (Tree.Types); - } - if (type_container_resolve_order != null) { foreach (TypeContainer tc in type_container_resolve_order) tc.EmitConstants (); foreach (TypeContainer tc in type_container_resolve_order) - tc.Emit (); + tc.EmitType (); } if (Tree.Types.Delegates != null) { foreach (Delegate d in Tree.Types.Delegates) - d.Emit (Tree.Types); + d.Emit (); } // // Run any hooks after all the types have been defined.