public const int EXTERN = 0x0800;
public const int VOLATILE = 0x1000;
public const int UNSAFE = 0x2000;
- public const int TOP = 0x2000;
+ private const int TOP = 0x4000;
+
+ public const int PROPERTY_CUSTOM = 0x4000; // Custom property modifier
//
- // We use this internally to flag that the method contains an iterator
+ // Compiler specific flags
//
- public const int METHOD_YIELDS = 0x8000;
+ 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;
s = "extern"; break;
case Modifiers.VOLATILE:
s = "volatile"; break;
+ case Modifiers.UNSAFE:
+ s = "unsafe"; break;
}
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.FamORAssem)
+ 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;
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.HaveStaticConstructor)
- t |= TypeAttributes.BeforeFieldInit;
-
- return t;
- }
public static FieldAttributes FieldAttr (int mod_flags)
{
public static MethodAttributes MethodAttr (int mod_flags)
{
- MethodAttributes ma = 0;
+ MethodAttributes ma = MethodAttributes.HideBySig;
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
if ((mod_flags & STATIC) != 0)
ma |= MethodAttributes.Static;
if ((mod_flags & ABSTRACT) != 0){
- ma |= MethodAttributes.Abstract | MethodAttributes.Virtual |
- MethodAttributes.HideBySig;
+ ma |= MethodAttributes.Abstract | MethodAttributes.Virtual;
}
if ((mod_flags & SEALED) != 0)
ma |= MethodAttributes.Final;
ma |= MethodAttributes.Virtual;
if ((mod_flags & OVERRIDE) != 0)
- ma |= MethodAttributes.Virtual | MethodAttributes.HideBySig;
+ ma |= MethodAttributes.Virtual;
else {
if ((ma & MethodAttributes.Virtual) != 0)
ma |= MethodAttributes.NewSlot;
}
- if ((mod_flags & NEW) != 0)
- ma |= MethodAttributes.HideBySig;
-
return ma;
}
// </summary>
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);
}
//
//
if ((mod & Accessibility) == 0){
mod |= def_access;
+ if (def_access != 0)
+ mod |= DEFAULT_ACCESS_MODIFER;
return mod;
}
return mod;
}
- for (i = 1; i < TOP; i <<= 1){
+ for (i = 1; i <= TOP; i <<= 1){
if ((i & invalid_flags) == 0)
continue;
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");
}
}
}