X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fclass.cs;h=fe79b444e36e6600d1a1b227e831fe5a3d278c1b;hb=be840425253576aa3c7910f8c0afa24283e340de;hp=37039f81ef460cb3d6cae1f631522ea664e5c1c8;hpb=6b26583efd14b0faa6c00ed8365195b9cd1a56e1;p=mono.git diff --git a/mcs/mcs/class.cs b/mcs/mcs/class.cs index 37039f81ef4..fe79b444e36 100644 --- a/mcs/mcs/class.cs +++ b/mcs/mcs/class.cs @@ -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 (); } //