X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fmodifiers.cs;h=4fb596d1e7d96f91259d51f37d4346bd8083314e;hb=168d424a84ed56998b15dd011e49291c581dd5a9;hp=268f4f79337c28fbe40755ec0744fc2a97ed29dd;hpb=234225d112c4b018b8d1796f4c06a15812137500;p=mono.git diff --git a/mcs/mcs/modifiers.cs b/mcs/mcs/modifiers.cs index 268f4f79337..4fb596d1e7d 100644 --- a/mcs/mcs/modifiers.cs +++ b/mcs/mcs/modifiers.cs @@ -25,14 +25,21 @@ namespace Mono.CSharp { public const int EXTERN = 0x0800; public const int VOLATILE = 0x1000; public const int UNSAFE = 0x2000; - public const int TOP = 0x2000; + private const int TOP = 0x2000; public const int PROPERTY_CUSTOM = 0x4000; // Custom property modifier // // We use this internally to flag that the method contains an iterator // - public const int METHOD_YIELDS = 0x8000; + public const int METHOD_YIELDS = 0x8000; + public const int METHOD_GENERIC = 0x10000; + public const int PARTIAL = 0x20000; + public const int DEFAULT_ACCESS_MODIFER = 0x40000; + public const int METHOD_EXTENSION = 0x80000; + public const int COMPILER_GENERATED = 0x100000; + public const int BACKING_FIELD = 0x200000 | COMPILER_GENERATED; + public const int DEBUGGER_HIDDEN = 0x400000; public const int Accessibility = PUBLIC | PROTECTED | INTERNAL | PRIVATE; @@ -77,6 +84,28 @@ namespace Mono.CSharp { return s; } + public static string GetDescription (MethodAttributes ma) + { + ma &= MethodAttributes.MemberAccessMask; + + if (ma == MethodAttributes.Assembly) + return "internal"; + + if (ma == MethodAttributes.Family) + return "protected"; + + if (ma == MethodAttributes.Public) + return "public"; + + if (ma == MethodAttributes.FamANDAssem) + return "protected internal"; + + if (ma == MethodAttributes.Private) + return "private"; + + throw new NotImplementedException (ma.ToString ()); + } + public static TypeAttributes TypeAttr (int mod_flags, bool is_toplevel) { TypeAttributes t = 0; @@ -106,19 +135,6 @@ namespace Mono.CSharp { return t; } - - public static TypeAttributes TypeAttr (int mod_flags, TypeContainer caller) - { - TypeAttributes t = TypeAttr (mod_flags, caller.IsTopLevel); - - // If we do not have static constructors, static methods - // can be invoked without initializing the type. - if (!caller.UserDefinedStaticConstructor && - (caller.Kind != Kind.Interface)) - t |= TypeAttributes.BeforeFieldInit; - - return t; - } public static FieldAttributes FieldAttr (int mod_flags) { @@ -152,9 +168,9 @@ namespace Mono.CSharp { if ((mod_flags & PUBLIC) != 0) ma |= MethodAttributes.Public; - if ((mod_flags & PRIVATE) != 0) + else if ((mod_flags & PRIVATE) != 0) ma |= MethodAttributes.Private; - if ((mod_flags & PROTECTED) != 0){ + else if ((mod_flags & PROTECTED) != 0){ if ((mod_flags & INTERNAL) != 0) ma |= MethodAttributes.FamORAssem; else @@ -192,18 +208,14 @@ namespace Mono.CSharp { // public static int Check (int allowed, int mod, int def_access, Location l) { - int invalid_flags = (~allowed) & mod; + int invalid_flags = (~allowed) & (mod & (Modifiers.TOP - 1)); int i; if (invalid_flags == 0){ int a = mod; if ((mod & Modifiers.UNSAFE) != 0){ - if (!RootContext.Unsafe){ - Report.Error (227, l, - "Unsafe code requires the -unsafe command " + - "line option to be specified"); - } + RootContext.CheckUnsafeOption (l); } // @@ -212,6 +224,8 @@ namespace Mono.CSharp { // if ((mod & Accessibility) == 0){ mod |= def_access; + if (def_access != 0) + mod |= DEFAULT_ACCESS_MODIFER; return mod; } @@ -243,7 +257,7 @@ namespace Mono.CSharp { public static void Error_InvalidModifier (Location l, string name) { - Report.Error (106, l, "the modifier " + name + " is not valid for this item"); + Report.Error (106, l, "The modifier `" + name + "' is not valid for this item"); } } }