* ILParser.jay: Make value types and enum types.
authorJackson Harper <jackson@novell.com>
Sun, 3 Aug 2003 18:31:03 +0000 (18:31 -0000)
committerJackson Harper <jackson@novell.com>
Sun, 3 Aug 2003 18:31:03 +0000 (18:31 -0000)
svn path=/trunk/mcs/; revision=17025

mcs/ilasm/parser/ChangeLog
mcs/ilasm/parser/ILParser.jay

index c99e816c5bbf836be67a2f216ddcf4821972536b..e99c4ad240175ce0d5ef4a1c7f372755dbfcd777 100644 (file)
@@ -1,3 +1,7 @@
+2003-08-03 Jackson Harper <jackson@latitudegeo.com>
+
+       * ILParser.jay: Make value types and enum types.
+       
 2003-08-03 Jackson Harper <jackson@latitudegeo.com>
 
        * ILParser.jay: Create label references where appropriate instead
index 7a3b9c5b7d7790bf26d533202ec016c9a23c6be2..4070f616e95fc192f400973a3ebb73112b1597b9 100644 (file)
@@ -18,6 +18,9 @@ namespace Mono.ILASM {
 \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
@@ -453,20 +456,30 @@ class_head                : D_CLASS class_attr id formal_typars_clause extends_clause
                           {\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
@@ -475,8 +488,8 @@ class_attr          : /* EMPTY */                           { $$ = new TypeAttr (); }
                        | 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