public const int UNSAFE = 0x2000;
public const int TOP = 0x2000;
+ public const int PROPERTY_CUSTOM = 0x4000; // Custom property modifier
+ public const int PARTIAL = 0x20000;
+ public const int DEFAULT_ACCESS_MODIFER = 0x40000;
+
//
// We use this internally to flag that the method contains an iterator
//
public const int METHOD_YIELDS = 0x8000;
+ public const int METHOD_GENERIC = 0x10000;
public const int Accessibility =
PUBLIC | PROTECTED | INTERNAL | PRIVATE;
return s;
}
+ public static string GetDescription (MethodAttributes ma)
+ {
+ if ((ma & MethodAttributes.Assembly) != 0)
+ return "internal";
+
+ if ((ma & MethodAttributes.Family) != 0)
+ return "protected";
+
+ if ((ma & MethodAttributes.Public) != 0)
+ return "public";
+
+ if ((ma & MethodAttributes.FamANDAssem) != 0)
+ return "protected internal";
+
+ if ((ma & MethodAttributes.Private) != 0)
+ 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.UserDefinedStaticConstructor &&
- !(caller is Interface))
- t |= TypeAttributes.BeforeFieldInit;
-
- return t;
- }
public static FieldAttributes FieldAttr (int mod_flags)
{
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;
}
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");
}
}
}