}
} 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;
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;
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;
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 ();
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 ());
}
}
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 ());
}
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;
return true;
}
- if ((mc.ModFlags & Modifiers.COMPILER_GENERATED) != 0)
+ if (((mc.ModFlags | symbol.ModFlags) & Modifiers.COMPILER_GENERATED) != 0)
return true;
if (symbol.EnableOverloadChecks (mc))
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);
}
protected virtual TypeAttributes TypeAttr {
- get { return CodeGen.Module.DefaultCharSetType; }
+ get { return Module.DefaultCharSetType; }
}
/// <remarks>
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++)
}
if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
- TypeBuilder.SetCustomAttribute (TypeManager.GetCompilerGeneratedAttribute (Location));
-#endif
+ PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (TypeBuilder);
base.Emit ();
}
public bool CheckAccessLevel (Type check_type)
{
Type tb = TypeBuilder;
-#if GMCS_SOURCE
+
if (this is GenericMethod) {
tb = Parent.TypeBuilder;
if (TypeBuilder == null)
return true;
}
-#endif
check_type = TypeManager.DropGenericTypeArguments (check_type);
if (check_type == tb)
if ((t == null) || !CheckAccessLevel (t))
continue;
-#if GMCS_SOURCE
if (!TypeManager.IsGenericType (current_type))
return t;
for (int i = 0; i < args.Length; i++)
targs [i] = args [i];
+#if GMCS_SOURCE
t = t.MakeGenericType (targs);
#endif
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;
}
}
}
+ 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,
- Location);
+ Parent, this, name.Name, constraints, name.OptAttributes, variance, Location);
AddToContainer (type_params [i], name.Name);
}
if (is_property) {
if ((entry.EntryType & EntryType.Field) != 0) {
fi = (FieldInfo)entry.Member;
- cmp_attrs = Parameters.EmptyReadOnlyParameters;
+ cmp_attrs = ParametersCompiled.EmptyReadOnlyParameters;
} else {
pi = (PropertyInfo) entry.Member;
cmp_attrs = TypeManager.GetParameterData (pi);
}
}
- public bool CheckExistingMembersOverloads (MemberCore member, string name, Parameters parameters)
+ public bool CheckExistingMembersOverloads (MemberCore member, string name, ParametersCompiled parameters)
{
ArrayList entries = (ArrayList)member_hash [name];
if (entries == null)
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;
}
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))
"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;
}