* ILParser.jay: Clones ExternTypeRefInsts as well as
authorJackson Harper <jackson@novell.com>
Wed, 21 Jul 2004 14:07:32 +0000 (14:07 -0000)
committerJackson Harper <jackson@novell.com>
Wed, 21 Jul 2004 14:07:32 +0000 (14:07 -0000)
ExternTypeRefs, wrap this check into a method so things are
somewhat clean.

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

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

index 00eed3b9b5fa194e8ddf6a663d0b47150951903a..c75d8379fc4ccee3972fd8352c660bfc7f9ba853 100644 (file)
@@ -1,3 +1,9 @@
+2004-07-21  Jackson Harper  <jackson@ximian.com>
+
+       * ILParser.jay: Clones ExternTypeRefInsts as well as
+       ExternTypeRefs, wrap this check into a method so things are
+       somewhat clean.
+       
 2004-07-08  Jackson Harper  <jackson@ximian.com>
 
        * ILParser.jay: Add custom attributes to assemblyrefs.
index 7e52165ada72b79c08dac15300b4c185380ac957..3d51f34262237a602eeb06a1a42b0d257c9f00df 100644 (file)
@@ -35,7 +35,21 @@ namespace Mono.ILASM {
                public CodeGen CodeGen {\r
                        get { return codegen; }\r
                }\r
-               \r
+\r
+                private ITypeRef GetTypeRef (ITypeRef b)\r
+                {\r
+                        ExternTypeRefInst etri = b as ExternTypeRefInst;\r
+                        ExternTypeRef etr;\r
+\r
+                        if (etri != null)\r
+                                return etri.Clone ();\r
+\r
+                        etr = b as ExternTypeRef;\r
+                        if (etr != null)\r
+                                return etr.Clone ();\r
+\r
+                        return b;\r
+                }\r
 %}\r
 \r
 %token EOF\r
@@ -714,50 +728,38 @@ type                      : K_CLASS class_ref
                           }\r
                        | type OPEN_BRACKET CLOSE_BRACKET\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((TypeRef) $1);\r
                                 base_type.MakeArray ();\r
                                 $$ = base_type;\r
                           }\r
                        | type OPEN_BRACKET bounds CLOSE_BRACKET\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 ArrayList bound_list = (ArrayList) $3;\r
                                 base_type.MakeBoundArray (bound_list);\r
                                 $$ = base_type;\r
                           }\r
                        | type AMPERSAND\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 base_type.MakeManagedPointer ();\r
                                 $$ = base_type;\r
                           }\r
                        | type STAR\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 base_type.MakeUnmanagedPointer ();\r
                                 $$ = base_type;\r
                           }\r
                        | type K_PINNED\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 base_type.MakePinned ();\r
                                 $$ = base_type;\r
                           }\r
                        | type K_MODREQ OPEN_PARENS class_ref CLOSE_PARENS\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 IClassRef class_ref = (IClassRef) $4;\r
                                 base_type.MakeCustomModified (codegen,\r
                                         CustomModifier.modopt, class_ref);\r
@@ -765,9 +767,7 @@ type                        : K_CLASS class_ref
                           }\r
                        | type K_MODOPT OPEN_PARENS class_ref CLOSE_PARENS\r
                           {\r
-                                ITypeRef base_type = (ITypeRef) $1;\r
-                                if (base_type is ExternTypeRef)\r
-                                        base_type = ((ExternTypeRef) base_type).Clone ();\r
+                                ITypeRef base_type = GetTypeRef ((ITypeRef) $1);\r
                                 IClassRef class_ref = (IClassRef) $4;\r
                                 base_type.MakeCustomModified (codegen,\r
                                         CustomModifier.modopt, class_ref);\r