+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
public override Type MakeArrayType ()
{
- return MakeArrayType (1);
+ return new ArrayType (this, 0);
}
public override Type MakeArrayType (int rank)
public override int GetArrayRank ()
{
- return rank;
+ return (rank == 0) ? 1 : rank;
}
public override Type BaseType {
sb.Append ("[");
for (int i = 1; i < rank; ++i)
sb.Append (",");
+ if (rank == 1)
+ sb.Append ("*");
sb.Append ("]");
return sb.ToString ();
}
#if NET_2_0
public override Type MakeArrayType ()
{
- return MakeArrayType (1);
+ return new ArrayType (this, 0);
}
public override Type MakeArrayType (int rank)
public override Type MakeArrayType ()
{
- return MakeArrayType (1);
+ return new ArrayType (this, 0);
}
public override Type MakeArrayType (int rank)
#if NET_2_0
public override Type MakeArrayType ()
{
- return MakeArrayType (1);
+ return new ArrayType (this, 0);
}
public override Type MakeArrayType (int rank)
+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
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 ()
{