* ILParser.jay: Create external method references
authorJackson Harper <jackson@novell.com>
Sat, 15 Mar 2003 11:01:32 +0000 (11:01 -0000)
committerJackson Harper <jackson@novell.com>
Sat, 15 Mar 2003 11:01:32 +0000 (11:01 -0000)
svn path=/trunk/mcs/; revision=12527

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

index 0b416ef1f04c5860665354fde3ffec95c3ba7e89..a650cf9cd92fa4d79cc721df9d56d48d391fe4e9 100644 (file)
@@ -1,3 +1,7 @@
+2003-03-15 Jackson Harper <jackson@latitudegeo.com>
+
+       * ILParser.jay: Create external method references
+
 2003-03-14 Jackson Harper <jackson@latitudegeo.com>
 
        * ILParser.jay: Emit instructions that take a method def as a single param
index 3062ed700fa8f10b30dcb016bfebb73dc6ed3e9c..439428c7e27a2e4495d121b8b67c823c00710f38 100644 (file)
@@ -691,6 +691,27 @@ method_ref         : internal_method_ref
                        | external_method_ref\r
                        ;\r
 \r
+external_method_ref    : type_ref external_type_ref DOUBLE_COLON name1 OPEN_PARENS arg_list CLOSE_PARENS\r
+                         {\r
+                               TypeRef parent = (TypeRef) $1;\r
+                               TypeRef extern_type = (TypeRef) $2;\r
+                               ClassRef class_ref = (ClassRef) extern_type.Type;\r
+                               PEAPI.Type[] type_array;\r
+                               if ($6 != null) {\r
+                                       ArrayList param_list = $6 as ArrayList;\r
+                                       int index = 0;\r
+                                       type_array = new PEAPI.Type[param_list.Count];\r
+                                       foreach (DictionaryEntry entry in param_list) {\r
+                                               type_array[index] = ((TypeRef)entry.Value).Type;\r
+                                               index++;\r
+                                       }\r
+                               } else {\r
+                                       type_array = new PEAPI.Type[0];\r
+                               }       \r
+                               $$ = class_ref.AddMethod ((string) $4, parent.Type, type_array);\r
+                         }\r
+                       ;  \r
+\r
 internal_method_ref    : type_ref internal_type_ref DOUBLE_COLON name1 OPEN_PARENS arg_list CLOSE_PARENS\r
                          {     \r
                                TypeRef parent, return_type;\r