In ilasm/tests:
authorAnkit Jain <radical@corewars.org>
Wed, 11 Jan 2006 12:50:01 +0000 (12:50 -0000)
committerAnkit Jain <radical@corewars.org>
Wed, 11 Jan 2006 12:50:01 +0000 (12:50 -0000)
* gen-nested2.il: New.
* gen-nested3.il: New. Test for new syntax for specifying namespace ie.,
as part of the type name instead of using '.namespace' directive.

In ilasm/codegen:

Support new syntax of specifying namespace, ie., as
part of the type name. (gen-nested2.il)
* TypeDef.cs (TypeDef.ctor): Add outer as a param.
Don't split name on '.' for inner classes.
* CodeGen.cs (CodeGen.BeginTypeDef): Update to use only 'name'
for inner classes and FullName for outermost class.

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

mcs/ilasm/codegen/ChangeLog
mcs/ilasm/codegen/CodeGen.cs
mcs/ilasm/codegen/TypeDef.cs
mcs/ilasm/tests/ChangeLog
mcs/ilasm/tests/gen-nested2.il [new file with mode: 0644]
mcs/ilasm/tests/gen-nested3.il [new file with mode: 0644]

index 3b2d44e23daf8e8fae8829e2b08b677a5402f5c5..4be1a50560183af7a55f702ef1017740378c0254 100644 (file)
@@ -1,3 +1,12 @@
+2006-01-11  Ankit Jain  <jankit@novell.com>
+
+       Support new syntax of specifying namespace, ie., as
+       part of the type name. (gen-nested2.il)
+       * TypeDef.cs (TypeDef.ctor): Add outer as a param.
+       Don't split name on '.' for inner classes.
+       * CodeGen.cs (CodeGen.BeginTypeDef): Update to use only 'name'
+       for inner classes and FullName for outermost class.
+
 2006-01-10  Ankit Jain  <jankit@novell.com>
 
        * TypeDef.cs (TypeDef.GetGenericParamNum): Return -1 if type has no
index 6e0117774f7dc191c4ee96fda1e28742ee5763c2..a3a4ed0350097e37a777e4dc63635495dd9c456d 100644 (file)
@@ -257,17 +257,21 @@ namespace Mono.ILASM {
                 {\r
                         TypeDef outer = null;\r
                         string cache_name = CacheName (name);\r
-\r
                         if (typedef_stack_top > 0) {\r
                                StringBuilder sb = new StringBuilder ();\r
-                               \r
+\r
                                for (int i = 0; i < typedef_stack_top; i++){\r
                                        outer = (TypeDef) typedef_stack [i];\r
-                                       sb.Append (outer.Name);\r
+                                       if (i == 0)\r
+                                               /* Use FullName for outermost class to get the\r
+                                                  namespace also */\r
+                                               sb.Append (outer.FullName);\r
+                                       else\r
+                                               sb.Append (outer.Name);\r
                                        sb.Append ("/");\r
                                }\r
                                sb.Append (name);\r
-                                cache_name = CacheName (sb.ToString ());\r
+                               cache_name = sb.ToString ();\r
                         }\r
 \r
                         TypeDef typedef = type_manager[cache_name];\r
@@ -282,10 +286,7 @@ namespace Mono.ILASM {
                         }\r
 \r
                         typedef = new TypeDef (attr, current_namespace,\r
-                                        name, parent, impl_list, location, gen_params);\r
-\r
-                        if (outer != null)\r
-                                typedef.OuterType = outer;\r
+                                        name, parent, impl_list, location, gen_params, outer);\r
 \r
                         type_manager[cache_name] = typedef;\r
                         current_customattrtarget = current_typedef = typedef;\r
index 103d3303ef00af6162093e2bd3b21d3e7ab1efb7..23f46b020c9c164228addd5560dfb0e89de469c3 100644 (file)
@@ -52,12 +52,13 @@ namespace Mono.ILASM {
                 private bool is_enum_class;
 
                 public TypeDef (PEAPI.TypeAttr attr, string name_space, string name,
-                                IClassRef parent, ArrayList impl_list, Location location, GenericParameters gen_params)
+                                IClassRef parent, ArrayList impl_list, Location location, GenericParameters gen_params, TypeDef outer)
                 {
                         this.attr = attr;
                         this.parent = parent;
                         this.impl_list = impl_list;
                         this.gen_params = gen_params;
+                        this.outer = outer;
 
                         field_table = new Hashtable ();
                         field_list = new ArrayList ();
@@ -76,7 +77,8 @@ namespace Mono.ILASM {
                         ResolveGenParams ();
 
                         int lastdot = name.LastIndexOf ('.');
-                        if (lastdot >= 0) {
+                        /* Namespace . name split should not be done for nested classes */
+                        if (lastdot >= 0 && outer == null) {
                                 if (name_space == null || name_space == "")
                                         this.name_space = name.Substring (0, lastdot);
                                 else
@@ -102,7 +104,6 @@ namespace Mono.ILASM {
 
                 public TypeDef OuterType {
                         get { return outer; }
-                        set { outer = value; }
                 }
 
                 public PEAPI.ClassDef PeapiType {
index 7de2f368fc0b587b16c7559ebb256a6de9d5e1c6..3ebf7d7a7eb82a9fc9a553b6a6b280bb18e7a97c 100644 (file)
@@ -1,3 +1,9 @@
+2006-01-11  Ankit Jain  <jankit@novell.com>
+
+       * gen-nested2.il: New.
+       * gen-nested3.il: New. Test for new syntax for specifying namespace ie.,
+       as part of the type name instead of using '.namespace' directive.
+
 2006-01-10  Ankit Jain  <jankit@novell.com>
 
        * gen-nested.il: New. Test for a generic type nested in a non-generic
diff --git a/mcs/ilasm/tests/gen-nested2.il b/mcs/ilasm/tests/gen-nested2.il
new file mode 100644 (file)
index 0000000..681511e
--- /dev/null
@@ -0,0 +1,55 @@
+// Test for specifying namespace as part of the type name,
+// instead of using .namespace directive. ildasm 2.0 uses
+// this style
+
+.assembly extern mscorlib
+{
+  .ver 1:0:5000:0
+}
+.assembly 'nested'
+{
+  .ver  0:0:0:0
+}
+.module nested.exe
+
+  .class private auto ansi beforefieldinit A.B
+       extends [mscorlib]System.Object
+  {
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void object::.ctor()
+       IL_0006:  ret 
+    }
+
+  .class nested public auto ansi beforefieldinit C
+       extends [mscorlib]System.Object
+  {
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void object::.ctor()
+       IL_0006:  ret 
+    }
+  }
+
+ }
+  .class private auto ansi beforefieldinit test
+       extends A.B/C
+  {
+
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void class A.B/C::.ctor()
+       IL_0006:  ret 
+    }
+
+  }
+
diff --git a/mcs/ilasm/tests/gen-nested3.il b/mcs/ilasm/tests/gen-nested3.il
new file mode 100644 (file)
index 0000000..8a247fc
--- /dev/null
@@ -0,0 +1,60 @@
+// Test for specifying namespace as part of the type name,
+// AND also using .namespace
+
+.assembly extern mscorlib
+{
+  .ver 1:0:5000:0
+}
+.assembly 'nested'
+{
+  .ver  0:0:0:0
+}
+.module nested.exe
+
+.namespace ns {
+  .class private auto ansi beforefieldinit A.B
+       extends [mscorlib]System.Object
+  {
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void object::.ctor()
+       IL_0006:  ret 
+    }
+
+  .class nested public auto ansi beforefieldinit C.D
+       extends [mscorlib]System.Object
+  {
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void object::.ctor()
+       IL_0006:  ret 
+    }
+  .class nested public auto ansi beforefieldinit further
+       extends [mscorlib]System.Object
+  {
+  }
+  }
+
+ }
+}
+  .class private auto ansi beforefieldinit test
+       extends ns.A.B/C.D
+  {
+
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void class ns.A.B/C.D::.ctor()
+       IL_0006:  ret 
+    }
+
+  }
+