X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fdecl.cs;h=6b341f0de709f57eaea7ab56f55ae425ca5b0d56;hb=f8be5461467b13a0423adc77b4f0ad897537d532;hp=74f104847344ee547bc9b48ac0640bcf5f31dfb5;hpb=e5fe6c826dda8b351c309ba62d0032cc0bcd926e;p=mono.git diff --git a/mcs/mcs/decl.cs b/mcs/mcs/decl.cs index 74f10484734..6b341f0de70 100644 --- a/mcs/mcs/decl.cs +++ b/mcs/mcs/decl.cs @@ -349,7 +349,7 @@ namespace Mono.CSharp { } } else { if ((ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN | Modifiers.PARTIAL)) == 0) { - if (RootContext.Version >= LanguageVersion.LINQ) { + if (RootContext.Version >= LanguageVersion.V_3) { Property.PropertyMethod pm = this as Property.PropertyMethod; if (pm is Indexer.GetIndexerMethod || pm is Indexer.SetIndexerMethod) pm = null; @@ -458,10 +458,10 @@ namespace Mono.CSharp { caching_flags &= ~Flags.Obsolete_Undetected; - if (OptAttributes == null || TypeManager.obsolete_attribute_type == null) + if (OptAttributes == null) return null; - Attribute obsolete_attr = OptAttributes.Search (TypeManager.obsolete_attribute_type); + Attribute obsolete_attr = OptAttributes.Search (PredefinedAttributes.Get.Obsolete); if (obsolete_attr == null) return null; @@ -557,17 +557,15 @@ namespace Mono.CSharp { while (TypeManager.HasElementType (p)) p = TypeManager.GetElementType (p); -#if GMCS_SOURCE - if (p.IsGenericParameter) + if (TypeManager.IsGenericParameter (p)) return true; if (TypeManager.IsGenericType (p)) { - foreach (Type t in p.GetGenericArguments ()) { + foreach (Type t in TypeManager.GetTypeArguments (p)) { if (!IsAccessibleAs (t)) return false; } } -#endif for (Type p_parent = null; p != null; p = p_parent) { p_parent = p.DeclaringType; @@ -683,9 +681,9 @@ namespace Mono.CSharp { caching_flags &= ~Flags.HasCompliantAttribute_Undetected; - if (OptAttributes != null && TypeManager.cls_compliant_attribute_type != null) { + if (OptAttributes != null) { Attribute cls_attribute = OptAttributes.Search ( - TypeManager.cls_compliant_attribute_type); + PredefinedAttributes.Get.CLSCompliant); if (cls_attribute != null) { caching_flags |= Flags.HasClsCompliantAttribute; bool value = cls_attribute.GetClsCompliantAttributeValue (); @@ -737,12 +735,12 @@ namespace Mono.CSharp { if (!IsClsComplianceRequired ()) { if (HasClsCompliantAttribute && Report.WarningLevel >= 2) { if (!IsExposedFromAssembly ()) { - Attribute a = OptAttributes.Search (TypeManager.cls_compliant_attribute_type); + Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant); Report.Warning (3019, 2, a.Location, "CLS compliance checking will not be performed on `{0}' because it is not visible from outside this assembly", GetSignatureForError ()); } if (!CodeGen.Assembly.IsClsCompliant) { - Attribute a = OptAttributes.Search (TypeManager.cls_compliant_attribute_type); + Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant); Report.Warning (3021, 2, a.Location, "`{0}' does not need a CLSCompliant attribute because the assembly is not marked as CLS-compliant", GetSignatureForError ()); } } @@ -751,7 +749,7 @@ namespace Mono.CSharp { if (HasClsCompliantAttribute) { if (CodeGen.Assembly.ClsCompliantAttribute == null && !CodeGen.Assembly.IsClsCompliant) { - Attribute a = OptAttributes.Search (TypeManager.cls_compliant_attribute_type); + Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant); Report.Warning (3014, 1, a.Location, "`{0}' cannot be marked as CLS-compliant because the assembly is not marked as CLS-compliant", GetSignatureForError ()); @@ -759,7 +757,7 @@ namespace Mono.CSharp { } if (!Parent.IsClsComplianceRequired ()) { - Attribute a = OptAttributes.Search (TypeManager.cls_compliant_attribute_type); + Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant); Report.Warning (3018, 1, a.Location, "`{0}' cannot be marked as CLS-compliant because it is a member of non CLS-compliant type `{1}'", GetSignatureForError (), Parent.GetSignatureForError ()); return false; @@ -941,7 +939,7 @@ namespace Mono.CSharp { return false; } - if (this is RootTypes) { + if (this is ModuleContainer) { Report.Error (101, symbol.Location, "The namespace `{0}' already contains a definition for `{1}'", ((DeclSpace)symbol).NamespaceEntry.GetSignatureForError (), symbol.MemberName.Name); @@ -1012,7 +1010,7 @@ namespace Mono.CSharp { } protected virtual TypeAttributes TypeAttr { - get { return CodeGen.Module.DefaultCharSetType; } + get { return Module.DefaultCharSetType; } } /// @@ -1029,7 +1027,6 @@ namespace Mono.CSharp { public override void Emit () { -#if GMCS_SOURCE if (type_params != null) { int offset = count_type_params - type_params.Length; for (int i = offset; i < type_params.Length; i++) @@ -1037,8 +1034,7 @@ namespace Mono.CSharp { } if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated) - TypeBuilder.SetCustomAttribute (TypeManager.GetCompilerGeneratedAttribute (Location)); -#endif + PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (TypeBuilder); base.Emit (); } @@ -1051,7 +1047,7 @@ namespace Mono.CSharp { public bool CheckAccessLevel (Type check_type) { Type tb = TypeBuilder; -#if GMCS_SOURCE + if (this is GenericMethod) { tb = Parent.TypeBuilder; @@ -1060,7 +1056,6 @@ namespace Mono.CSharp { if (TypeBuilder == null) return true; } -#endif check_type = TypeManager.DropGenericTypeArguments (check_type); if (check_type == tb) @@ -1176,7 +1171,6 @@ namespace Mono.CSharp { if ((t == null) || !CheckAccessLevel (t)) continue; -#if GMCS_SOURCE if (!TypeManager.IsGenericType (current_type)) return t; @@ -1185,6 +1179,7 @@ namespace Mono.CSharp { for (int i = 0; i < args.Length; i++) targs [i] = args [i]; +#if GMCS_SOURCE t = t.MakeGenericType (targs); #endif @@ -1248,9 +1243,13 @@ namespace Mono.CSharp { get; } - public override void ApplyAttributeBuilder (Attribute a, CustomAttributeBuilder cb) + public virtual ModuleContainer Module { + get { return Parent.Module; } + } + + public override void ApplyAttributeBuilder (Attribute a, CustomAttributeBuilder cb, PredefinedAttributes pa) { - if (a.Type == TypeManager.required_attr_type) { + if (a.Type == pa.Required) { Report.Error (1608, a.Location, "The RequiredAttribute attribute is not permitted on C# types"); return; } @@ -1335,9 +1334,14 @@ namespace Mono.CSharp { } } + Variance variance = name.Variance; + if (name.Variance != Variance.None && !(this is Delegate || this is Interface)) { + Report.Error (1960, name.Location, "Variant type parameters can only be used with interfaces and delegates"); + variance = Variance.None; + } + type_params [i] = new TypeParameter ( - Parent, this, name.Name, constraints, name.OptAttributes, name.Variance, - Location); + Parent, this, name.Name, constraints, name.OptAttributes, variance, Location); AddToContainer (type_params [i], name.Name); } @@ -2671,12 +2675,12 @@ namespace Mono.CSharp { p_types = pd.Types; } else { MethodBase mb = (MethodBase) ce.Member; -#if GMCS_SOURCE + // TODO: This is more like a hack, because we are adding generic methods // twice with and without arity name - if (mb.IsGenericMethod && !member.MemberName.IsGeneric) + if (TypeManager.IsGenericMethod (mb) && !member.MemberName.IsGeneric) continue; -#endif + pd = TypeManager.GetParameterData (mb); p_types = pd.Types; } @@ -2692,11 +2696,11 @@ namespace Mono.CSharp { type_b = p_types [ii]; #if GMCS_SOURCE - if (type_a.IsGenericParameter && type_a.DeclaringMethod != null) - type_a = null; + if (TypeManager.IsGenericParameter (type_a) && type_a.DeclaringMethod != null) + type_a = typeof (TypeParameter); - if (type_b.IsGenericParameter && type_b.DeclaringMethod != null) - type_b = null; + if (TypeManager.IsGenericParameter (type_b) && type_b.DeclaringMethod != null) + type_b = typeof (TypeParameter); #endif if ((pd.FixedParameters [ii].ModFlags & Parameter.Modifier.ISBYREF) != (parameters.FixedParameters [ii].ModFlags & Parameter.Modifier.ISBYREF)) @@ -2736,9 +2740,15 @@ namespace Mono.CSharp { "A partial method declaration and partial method implementation must be both an extension method or neither"); } } else { - Report.Error (663, member.Location, - "An overloaded method `{0}' cannot differ on use of parameter modifiers only", - member.GetSignatureForError ()); + if (member is Constructor) { + Report.Error (851, member.Location, + "Overloaded contructor `{0}' cannot differ on use of parameter modifiers only", + member.GetSignatureForError ()); + } else { + Report.Error (663, member.Location, + "Overloaded method `{0}' cannot differ on use of parameter modifiers only", + member.GetSignatureForError ()); + } } return false; }