[configure] rename "--with-interpreter=yes" to "--enable-interpreter"
[mono.git] / mcs / mcs / class.cs
index 96ac0c8db4c24aacc9f18f573adfff3d885d54da..fe79b444e36e6600d1a1b227e831fe5a3d278c1b 100644 (file)
@@ -22,7 +22,7 @@ using System.Text;
 using System.Diagnostics;
 using Mono.CompilerServices.SymbolWriter;
 
-#if NET_2_1
+#if MOBILE
 using XmlElement = System.Object;
 #endif
 
@@ -297,6 +297,10 @@ namespace Mono.CSharp
                                                throw new InternalErrorException (tc, e);
                                        }
                                }
+
+                               if (PartialContainer != null && PartialContainer != this) {
+                                       containers = null;
+                               }
                        }
 
                        return true;
@@ -1439,7 +1443,11 @@ namespace Mono.CSharp
                                        targs.Arguments = new TypeSpec[hoisted_tparams.Length];
                                        for (int i = 0; i < hoisted_tparams.Length; ++i) {
                                                var tp = hoisted_tparams[i];
-                                               var local_tp = new TypeParameter (tp, null, new MemberName (tp.Name, Location), null);
+                                               var tp_name = tp.Name;
+#if DEBUG
+                                               tp_name += "_Proxy";
+#endif
+                                               var local_tp = new TypeParameter (tp, null, new MemberName (tp_name, Location), null);
                                                tparams.Add (local_tp);
 
                                                targs.Add (new SimpleName (tp.Name, Location));
@@ -1455,6 +1463,12 @@ namespace Mono.CSharp
                                        var mutator = new TypeParameterMutator (hoisted_tparams, tparams);
                                        return_type = mutator.Mutate (return_type);
                                        local_param_types = mutator.Mutate (local_param_types);
+
+                                       var inflator = new TypeParameterInflator (this, null, hoisted_tparams, targs.Arguments);
+                                       for (int i = 0; i < hoisted_tparams.Length; ++i) {
+                                               var tp_spec = (TypeParameterSpec) targs.Arguments [i];
+                                               tp_spec.InflateConstraints (inflator, tp_spec);
+                                       }
                                } else {
                                        member_name = new MemberName (name);
                                }
@@ -1467,7 +1481,7 @@ namespace Mono.CSharp
                                        base_parameters[i].Resolve (this, i);
                                }
 
-                               var cloned_params = ParametersCompiled.CreateFullyResolved (base_parameters, method.Parameters.Types);
+                               var cloned_params = ParametersCompiled.CreateFullyResolved (base_parameters, local_param_types);
                                if (method.Parameters.HasArglist) {
                                        cloned_params.FixedParameters[0] = new Parameter (null, "__arglist", Parameter.Modifier.NONE, null, Location);
                                        cloned_params.Types[0] = Module.PredefinedTypes.RuntimeArgumentHandle.Resolve ();
@@ -1661,6 +1675,8 @@ namespace Mono.CSharp
 
                public override void ExpandBaseInterfaces ()
                {
+                       DoResolveTypeParameters ();
+
                        if (!IsPartialPart)
                                DoExpandBaseInterfaces ();
 
@@ -1766,8 +1782,6 @@ namespace Mono.CSharp
                protected override void DoDefineContainer ()
                {
                        DefineBaseTypes ();
-
-                       DoResolveTypeParameters ();
                }
 
                //
@@ -2500,7 +2514,7 @@ namespace Mono.CSharp
                        //      return null;
 
                        var container = PartialContainer.CurrentType;
-                       return MemberCache.FindNestedType (container, name, arity);
+                       return MemberCache.FindNestedType (container, name, arity, false);
                }
 
                public void Mark_HasEquals ()