* ILParser.jay: Implement address constants and string
authorJackson Harper <jackson@novell.com>
Wed, 20 Aug 2003 06:07:46 +0000 (06:07 -0000)
committerJackson Harper <jackson@novell.com>
Wed, 20 Aug 2003 06:07:46 +0000 (06:07 -0000)
constants. Add data definitions to their types, and create data
item lists. Also implement long form overrides.

svn path=/trunk/mcs/; revision=17435

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

index 9e623f39e1fc0dc733382430425aa784afc97219..fcd8b6c01b761227c83de52d702dcb0fef74d12a 100644 (file)
@@ -1,3 +1,9 @@
+2003-08-19 Jackson Harper <jackson@latitudegeo.com>
+
+       * ILParser.jay: Implement address constants and string
+       constants. Add data definitions to their types, and create data
+       item lists. Also implement long form overrides.
+       
 2003-08-19 Jackson Harper <jackson@latitudegeo.com>
 
        * ILParser.jay: Add override methods.
index 337ffd060983056cc41845bb0d4ee1cf4117d943..736c072487bc8067691104583fe4a32587846c07 100644 (file)
@@ -634,8 +634,30 @@ class_decl         : method_all
                           {\r
                                 codegen.CurrentTypeDef.SetPack ((int) $2);\r
                           }\r
-                       | D_OVERRIDE type_spec DOUBLE_COLON method_name\r
-                         K_WITH call_conv type type_spec DOUBLE_COLON method_name\r
+                       | D_OVERRIDE type_spec DOUBLE_COLON method_name K_WITH call_conv type\r
+                          type_spec DOUBLE_COLON method_name type_list\r
+                          {\r
+                                //\r
+                                // My copy of the spec didn't have a type_list but\r
+                                // it seems pretty crucial\r
+                                //\r
+                                ITypeRef owner = (ITypeRef) $2;\r
+                                ArrayList arg_list = (ArrayList) $11;\r
+                                ITypeRef[] param_list;\r
+                                IMethodRef decl;\r
+\r
+                                if (arg_list != null)\r
+                                        param_list = (ITypeRef[]) arg_list.ToArray (typeof (ITypeRef));\r
+                                else\r
+                                        param_list = new ITypeRef[0];\r
+\r
+                                decl = owner.GetMethodRef ((ITypeRef) $7,\r
+                                        (CallConv) $6, (string) $4, param_list);\r
+\r
+                                string sig = MethodDef.CreateSignature ((string) $10,\r
+                                                                        param_list);\r
+                                codegen.CurrentTypeDef.AddOverride (sig, decl);                                        \r
+                          }\r
                          OPEN_PARENS sig_args CLOSE_PARENS\r
                        | language_decl\r
                         | constraint_decl\r
@@ -1068,11 +1090,11 @@ field_decl              : D_FIELD repeat_opt field_attr type id at_opt init_opt
                                 if ($2 != null) {\r
                                         field_def.SetOffset ((uint) $2);\r
                                 }\r
-                                /*\r
+                                \r
                                 if ($6 != null) {\r
                                         field_def.AddDataValue ((DataConstant) $6);\r
                                 }\r
-                                */\r
+                                \r
                                 if ($7 != null) {\r
                                         field_def.SetValue ((Constant) $7);\r
                                 }\r
@@ -1151,8 +1173,8 @@ field_attr                : /* EMPTY */
 at_opt                 : /* EMPTY */\r
                        | K_AT id\r
                           {\r
-                                // TODO: Implement DataTable\r
-                                // $$ = new DataConstant (DataTable.GetOffset ((string) $2));\r
+                                // DataDef def = new DataDef ((string) $2, false);\r
+                                // def.PeapiConstant = new DataConstant (DataTable.GetOffset ((string) $2));\r
                           }\r
                        ;\r
 \r
@@ -1220,9 +1242,6 @@ field_init                : K_FLOAT32 OPEN_PARENS float64 CLOSE_PARENS
 \r
 data_decl              : data_head data_body\r
                           {\r
-                                /*\r
-                                Console.WriteLine ("Creating data decl: '{0}' '{1}'", $1, $2);\r
-\r
                                 DataDef datadef = (DataDef) $1;\r
                                 \r
                                 if ($2 is ArrayList) {\r
@@ -1236,7 +1255,7 @@ data_decl         : data_head data_body
                                 } else {\r
                                         datadef.PeapiConstant = (PEAPI.Constant) $2;\r
                                 }\r
-                                */\r
+                                codegen.CurrentTypeDef.AddDataDef ((DataDef) $1);\r
                           }\r
                        ;\r
 \r
@@ -1259,11 +1278,27 @@ data_body               : OPEN_BRACE dataitem_list CLOSE_BRACE
                        ;\r
 \r
 dataitem_list          : dataitem\r
+                          {\r
+                                ArrayList dataitem_list = new ArrayList ();\r
+                                dataitem_list.Add ($1);\r
+                                $$ = dataitem_list;\r
+                          }\r
                        | dataitem_list COMMA dataitem\r
+                          {\r
+                                ArrayList list = (ArrayList) $1;\r
+                                list.Add ($3);\r
+                          }\r
                        ;\r
 \r
 dataitem               : K_CHAR STAR OPEN_PARENS comp_qstring CLOSE_PARENS\r
+                          {\r
+                                $$ = new StringConst ((string) $4);\r
+                          }\r
                        | AMPERSAND OPEN_PARENS id CLOSE_PARENS\r
+                          {\r
+                                DataDef def = codegen.CurrentTypeDef.GetDataDef ((string) $3);\r
+                                $$ = new AddressConstant ((DataConstant) def.PeapiConstant);\r
+                          }\r
                        | K_BYTEARRAY ASSIGN OPEN_PARENS bytes CLOSE_PARENS\r
                           {\r
                                 $$ = new ByteArrConst ((byte[]) $4);\r