\r
private CodeGen codegen;\r
\r
+ private bool is_value_class;\r
+ private bool is_enum_class;\r
+\r
public ILParser (CodeGen codegen) {\r
this.codegen = codegen;\r
}\r
{\r
codegen.BeginTypeDef ((TypeAttr) $2, (string) $3, \r
$5 as IClassRef, $6 as ArrayList, null);\r
+ \r
+ if (is_value_class)\r
+ codegen.CurrentTypeDef.MakeValueClass ();\r
+ if (is_enum_class)\r
+ codegen.CurrentTypeDef.MakeEnumClass ();\r
\r
if ($4 != null) {\r
ArrayList typars_list = (ArrayList) $4;\r
foreach (string id in typars_list)\r
codegen.CurrentTypeDef.AddGenericParam (id);\r
- }\r
- \r
+ } \r
}\r
;\r
\r
class_attrs : class_attrs class_attr\r
;\r
\r
-class_attr : /* EMPTY */ { $$ = new TypeAttr (); }\r
+class_attr : /* EMPTY */ \r
+ { \r
+ // Reset some flags\r
+ is_value_class = false;\r
+ is_enum_class = false;\r
+ $$ = new TypeAttr ();\r
+ }\r
| class_attr K_PUBLIC { $$ = (TypeAttr)$1 | TypeAttr.Public; } \r
| class_attr K_PRIVATE { $$ = (TypeAttr)$1 | TypeAttr.Private; }\r
| class_attr K_NESTED K_PRIVATE { $$ = (TypeAttr)$1 | TypeAttr.NestedPrivate; }\r
| class_attr K_NESTED K_ASSEMBLY { $$ = (TypeAttr)$1 | TypeAttr.NestedAssembly;}\r
| class_attr K_NESTED K_FAMANDASSEM { $$ = (TypeAttr)$1 | TypeAttr.NestedFamAndAssem; }\r
| class_attr K_NESTED K_FAMORASSEM { $$ = (TypeAttr)$1 | TypeAttr.NestedFamOrAssem; }\r
- | class_attr K_VALUE { }\r
- | class_attr K_ENUM { }\r
+ | class_attr K_VALUE { is_value_class = true; }\r
+ | class_attr K_ENUM { is_enum_class = true; }\r
| class_attr K_INTERFACE { $$ = (TypeAttr)$1 | TypeAttr.Interface; }\r
| class_attr K_SEALED { $$ = (TypeAttr)$1 | TypeAttr.Sealed; }\r
| class_attr K_ABSTRACT { $$ = (TypeAttr)$1 | TypeAttr.Abstract; }\r