* 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
+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
{\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
}\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
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 ();
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
public TypeDef OuterType {
get { return outer; }
- set { outer = value; }
}
public PEAPI.ClassDef PeapiType {
+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
--- /dev/null
+// 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
+ }
+
+ }
+
--- /dev/null
+// 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
+ }
+
+ }
+