2009-07-28 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 29 Jul 2009 00:42:38 +0000 (00:42 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 29 Jul 2009 00:42:38 +0000 (00:42 -0000)
* DerivedTypes.cs (ArrayType): Special case vector arrays using zero
 as rank. This is required because we need to make the distinction
between a vector and a one dimension SZARRAY.

* EnumBuilder.cs: Create vectors as rank-zero ArrayType objects.

  * TypeBuilder.cs: Same.

* GenericTypeParameterBuilder.cs: Same.

2009-07-28 Rodrigo Kumpera  <rkumpera@novell.com>

* DerivedTypesTests.cs: Add test for the distinction between
vector and one-dimension SZARRAY.

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

mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/DerivedTypes.cs
mcs/class/corlib/System.Reflection.Emit/EnumBuilder.cs
mcs/class/corlib/System.Reflection.Emit/GenericTypeParameterBuilder.cs
mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs
mcs/class/corlib/Test/System.Reflection.Emit/ChangeLog
mcs/class/corlib/Test/System.Reflection.Emit/DerivedTypesTest.cs

index 3d3e9e4088b5ee6fcc9c26e3b09caf863ed04c11..a39bfdbf20aa84c589e6d759d0ea3feb21557159 100644 (file)
@@ -1,3 +1,15 @@
+2009-07-28 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * DerivedTypes.cs (ArrayType): Special case vector arrays using zero
+        as rank. This is required because we need to make the distinction
+       between a vector and a one dimension SZARRAY.
+
+       * EnumBuilder.cs: Create vectors as rank-zero ArrayType objects.
+
+       * TypeBuilder.cs: Same.
+
+       * GenericTypeParameterBuilder.cs: Same.
+
 2009-07-28 Rodrigo Kumpera  <rkumpera@novell.com>
 
        DerivedTypes.cs: ByRef and Pointer types return Array as base
index 640029daabf2e26ec298c9d3351bd5a94bfb22b1..14de60e0f729f7bd93fffa706e7fdabe8991cff5 100644 (file)
@@ -219,7 +219,7 @@ namespace System.Reflection.Emit
 
                public override Type MakeArrayType ()
                {
-                       return MakeArrayType (1);
+                       return new ArrayType (this, 0);
                }
 
                public override Type MakeArrayType (int rank)
@@ -330,7 +330,7 @@ namespace System.Reflection.Emit
 
                public override int GetArrayRank ()
                {
-                       return rank;
+                       return (rank == 0) ? 1 : rank;
                }
 
                public override Type BaseType {
@@ -352,6 +352,8 @@ namespace System.Reflection.Emit
                        sb.Append ("[");
                        for (int i = 1; i < rank; ++i)
                                sb.Append (",");
+                       if (rank == 1)
+                               sb.Append ("*");
                        sb.Append ("]");
                        return sb.ToString ();
                }
index 83b1c993d4ffd323288686a0492c124607012879..4f873b911973319deae7d4343930649b0bbb4d88 100644 (file)
@@ -354,7 +354,7 @@ namespace System.Reflection.Emit {
 #if NET_2_0
                public override Type MakeArrayType ()
                {
-                       return MakeArrayType (1);  
+                       return  new ArrayType (this, 0);
                }
 
                public override Type MakeArrayType (int rank)
index f3758d4a49ecedae166f00ba7339844f40156ea5..0d1a2a012453a3a70e48175cb280326a99b7f98c 100644 (file)
@@ -436,7 +436,7 @@ namespace System.Reflection.Emit
 
                public override Type MakeArrayType ()
                {
-                       return MakeArrayType (1);
+                       return  new ArrayType (this, 0);
                }
 
                public override Type MakeArrayType (int rank)
index 299ae5ff44c0f29a03aa3834d3e29d2c4165533a..e80c33f871ef7e6ca2088141c533c27ebb2b5adc 100644 (file)
@@ -1382,7 +1382,7 @@ namespace System.Reflection.Emit
 #if NET_2_0
                public override Type MakeArrayType ()
                {
-                       return MakeArrayType (1);
+                       return new ArrayType (this, 0);
                }
 
                public override Type MakeArrayType (int rank)
index a9501c5fea209179ced5e256c16f3192b3c6bbe4..e48fe2a5a28d090141431377d6093cf8ce281111 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-28 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * DerivedTypesTests.cs: Add test for the distinction between
+       vector and one-dimension SZARRAY.
+
 2009-07-28 Rodrigo Kumpera  <rkumpera@novell.com>
 
        DerivedTypesTest.cs: ByRef and Pointer types return Array as base
index 10d12ad6ffa4699ed4051e2ec6ed45889b21590b..3425623f13de61f5a3c8a45404de0276d33c9938 100644 (file)
@@ -1085,6 +1085,34 @@ namespace MonoTests.System.Reflection.Emit
                        typeCount = 0;
                }
 
+               [Test]
+               public void OneDimMultiDimentionArray ()
+               {
+                       TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
+
+                       Type arr1 = tb.MakeArrayType ();
+                       Type arr2 = tb.MakeArrayType (1);
+                       Type arr3 = arr1.MakeArrayType (1);
+
+                       Assert.AreEqual ("type[]", arr1.Name, "#1");
+                       Assert.AreEqual ("type[*]", arr2.Name, "#2");
+                       Assert.AreEqual ("type[][*]", arr3.Name, "#3");
+
+                       var gparam = tb.DefineGenericParameters ("F")[0];
+                       Type arr4 = gparam.MakeArrayType ();
+                       Type arr5 = gparam.MakeArrayType (1);
+
+                       Assert.AreEqual ("F[]", arr4.Name, "#4");
+                       Assert.AreEqual ("F[*]", arr5.Name, "#5");
+
+                       var eb = module.DefineEnum ("enum", TypeAttributes.Public, tb);
+                       Type arr6 = eb.MakeArrayType ();
+                       Type arr7 = eb.MakeArrayType (1);
+
+                       Assert.AreEqual ("enum[]", arr6.Name, "#6");
+                       Assert.AreEqual ("enum[*]", arr7.Name, "#7");
+               }
+
                [Test]
                public void PropertiesValue ()
                {