UnderlyingType != TypeManager.short_type &&
UnderlyingType != TypeManager.ushort_type &&
UnderlyingType != TypeManager.byte_type &&
+ UnderlyingType != TypeManager.char_type &&
UnderlyingType != TypeManager.sbyte_type) {
Report.Error (1008, Location,
- "Type byte, sbyte, short, ushort, int, uint, " +
+ "Type byte, sbyte, short, char, ushort, int, uint, " +
"long, or ulong expected (got: " +
TypeManager.CSharpName (UnderlyingType) + ")");
return null;
}
if (IsTopLevel) {
+ if (TypeManager.NamespaceClash (Name))
+ return null;
+
ModuleBuilder builder = CodeGen.ModuleBuilder;
TypeBuilder = builder.DefineType (Name, attr, TypeManager.enum_type);
if (e is IntConstant || e is UIntConstant || e is LongConstant ||
e is ByteConstant || e is SByteConstant || e is ShortConstant ||
- e is UShortConstant || e is ULongConstant || e is EnumConstant)
+ e is UShortConstant || e is ULongConstant || e is EnumConstant ||
+ e is CharConstant)
return true;
else
return false;
Type etype = TypeManager.EnumToUnderlying (c.Type);
if (!ImplicitConversionExists (etype, UnderlyingType)){
- Expression.Error_CannotConvertImplicit (
+ Convert.Error_CannotImplicitConversion (
loc, c.Type, UnderlyingType);
return null;
}
FieldAttributes attr = FieldAttributes.Public | FieldAttributes.Static
| FieldAttributes.Literal;
- FieldBuilder fb = TypeBuilder.DefineField (name, UnderlyingType, attr);
+ FieldBuilder fb = TypeBuilder.DefineField (name, TypeBuilder, attr);
bool fail;
default_value = TypeManager.ChangeType (default_value, UnderlyingType, out fail);
if (default_value == null)
return true;
-
} else {
+ if (name == "value__"){
+ Report.Error (76, loc, "The name `value__' is reserved for enumerations");
+ return false;
+ }
+
FieldBuilder fb = TypeBuilder.DefineField (
- name, UnderlyingType, attr);
+ name, TypeBuilder, attr);
if (default_value == null) {
Report.Error (543, loc, "Enumerator value for '" + name + "' is too large to " +