* ILParser.jay: Add locals, method references, and method instructions
authorJackson Harper <jackson@novell.com>
Sat, 10 May 2003 19:32:05 +0000 (19:32 -0000)
committerJackson Harper <jackson@novell.com>
Sat, 10 May 2003 19:32:05 +0000 (19:32 -0000)
svn path=/trunk/mcs/; revision=14460

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

index e1bfc9c271127643a4844bc89b68b742bb2db4a3..22aff8571a0f6a556888f7f6243fbf4545993d45 100644 (file)
@@ -1,3 +1,7 @@
+2003-05-10 Jackson Harper <jackson@latitudegeo.com>
+
+       * ILParser.jay: Add locals, method references, and method instructions
+               
 2003-05-07 Jackson Harper <jackson@latitudegeo.com>
 
        * ILParser.jay: Add type instructions. NOTE - type_spec is not
index 10bafe0aed760edfe2071e2c9540dc1478fefd21..4c5b1b71a1ed1d55c66ad82066319a5a2cfd4eef 100644 (file)
@@ -1175,16 +1175,11 @@ data_decl               : data_head data_body
 \r
 data_head              : D_DATA tls id ASSIGN\r
                           {\r
-                                \r
-                                $$ = new DataDef ((string) $3, (bool)\r
-                          $2);\r
-                               \r
+                                $$ = new DataDef ((string) $3, (bool) $2);    \r
                           } \r
                        | D_DATA tls\r
                           {\r
-                                \r
                                 $$ = new DataDef (String.Empty, (bool) $2);\r
-                                \r
                           }\r
                        ;\r
 \r
@@ -1432,15 +1427,41 @@ sig_arg                 : param_attr type
                        | param_attr type K_MARSHAL OPEN_PARENS native_type CLOSE_PARENS id\r
                        ;\r
 \r
+type_list               : /* EMPTY */   { $$ = new ArrayList (); }\r
+                        | type\r
+                          {\r
+                                ArrayList type_list = new ArrayList ();\r
+                                type_list.Add ($1);\r
+                                $$ = type_list;\r
+                          }\r
+                        | type_list COMMA type\r
+                          {\r
+                                ArrayList type_list = (ArrayList) $1;\r
+                                type_list.Add ($3);\r
+                          }\r
+                        ;\r
+\r
 method_decls           : /* EMPTY */\r
                        | method_decls method_decl\r
                        ;\r
 \r
 method_decl            : D_EMITBYTE int32\r
                        | D_MAXSTACK int32\r
-                       | D_LOCALS OPEN_PARENS sig_args CLOSE_PARENS\r
-                       | D_LOCALS K_INIT OPEN_PARENS sig_args CLOSE_PARENS\r
+                       | D_LOCALS OPEN_PARENS local_list CLOSE_PARENS\r
+                          {\r
+                                codegen.CurrentMethodDef.AddLocals (\r
+                                        (ArrayList) $3);\r
+                          }\r
+                       | D_LOCALS K_INIT OPEN_PARENS local_list CLOSE_PARENS\r
+                          {\r
+                                codegen.CurrentMethodDef.AddLocals (\r
+                                        (ArrayList) $4);\r
+                                codegen.CurrentMethodDef.InitLocals ();\r
+                          }\r
                        | D_ENTRYPOINT\r
+                          {\r
+                                codegen.CurrentMethodDef.EntryPoint ();\r
+                          }\r
                        | D_ZEROINIT\r
                        | D_EXPORT OPEN_BRACKET int32 CLOSE_BRACKET\r
                        | D_EXPORT OPEN_BRACKET int32 CLOSE_BRACKET K_AS id\r
@@ -1461,6 +1482,38 @@ method_decl              : D_EMITBYTE int32
                        | data_decl\r
                        ;\r
 \r
+local_list              : /* EMPTY */\r
+                        | local\r
+                          {\r
+                                ArrayList local_list = new ArrayList ();\r
+                                local_list.Add ($1);\r
+                                $$ = local_list;\r
+                          }\r
+                        | local_list COMMA local\r
+                          {\r
+                                ArrayList local_list = (ArrayList) $1;\r
+                                local_list.Add ($3);\r
+                          }\r
+                        ;\r
+\r
+local                   : type\r
+                          {\r
+                                $$ = new Local (-1, (ITypeRef) $1);\r
+                          }\r
+                        | type id\r
+                          {\r
+                                $$ = new Local (-1, (string) $2, (ITypeRef) $1);\r
+                          }\r
+                        | OPEN_BRACKET int32 CLOSE_BRACKET type\r
+                          {\r
+                                $$ = new Local ((int) $2, (ITypeRef) $4);\r
+                          }\r
+                        | OPEN_BRACKET int32 CLOSE_BRACKET type id\r
+                          {\r
+                                $$ = new Local ((int) $2, (string) $5, (ITypeRef) $4);\r
+                          }\r
+                        ;\r
+\r
 type_spec              : class_ref\r
                        | OPEN_BRACKET comp_name CLOSE_BRACKET\r
                        | OPEN_BRACKET D_MODULE comp_name CLOSE_BRACKET\r
@@ -1504,6 +1557,9 @@ instr                     : INSTR_NONE
                                         new SimpInstr ((Op) $1));\r
                           }\r
                        | INSTR_VAR int32\r
+                          {\r
+                               \r
+                          }\r
                        | INSTR_I int32\r
                           {\r
                                 codegen.CurrentMethodDef.AddInstr (new\r
@@ -1544,7 +1600,8 @@ instr                     : INSTR_NONE
                           }\r
                        | INSTR_METHOD method_ref\r
                           {\r
-                                \r
+                                codegen.CurrentMethodDef.AddInstr (new MethodInstr ((MethodOp) $1,\r
+                                        (IMethodRef) $2));\r
                           }\r
                        | INSTR_FIELD type type_spec DOUBLE_COLON id\r
                        | INSTR_FIELD type id\r
@@ -1570,9 +1627,19 @@ instr                    : INSTR_NONE
                        ;\r
 \r
 method_ref             : call_conv type type_spec DOUBLE_COLON method_name \r
-                         OPEN_PARENS sig_args CLOSE_PARENS\r
+                         OPEN_PARENS type_list CLOSE_PARENS\r
+                          {\r
+                                IClassRef owner = (IClassRef) $3;\r
+                                ArrayList arg_list = (ArrayList) $7;\r
+                                \r
+                                $$ = owner.GetMethodRef ((ITypeRef) $2, (string) $5,\r
+                                        (ITypeRef[]) arg_list.ToArray (typeof (ITypeRef)));\r
+                          }\r
                        | call_conv type method_name \r
-                         OPEN_PARENS sig_args CLOSE_PARENS\r
+                         OPEN_PARENS type_list CLOSE_PARENS\r
+                          {\r
+                                \r
+                          }\r
                        ;\r
 \r
 labels                 : /* EMPTY */\r