2008-01-10 Jb Evain <jbevain@novell.com>
authorJb Evain <jbevain@gmail.com>
Wed, 9 Jan 2008 23:09:09 +0000 (23:09 -0000)
committerJb Evain <jbevain@gmail.com>
Wed, 9 Jan 2008 23:09:09 +0000 (23:09 -0000)
* Mono.Cecil/ReflectionHelper.cs: deal with complex arrays.

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

mcs/class/Mono.Cecil/ChangeLog
mcs/class/Mono.Cecil/Mono.Cecil/ReflectionHelper.cs

index 40e726ec6a6b14d498d062e108802c5bf01e7b60..b0c10f0c33d8d1233ad7002a98aa3659449e87f0 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-10  Jb Evain  <jbevain@novell.com>
+
+       * Mono.Cecil/ReflectionHelper.cs: deal with complex arrays.
+
 2008-01-07  Jb Evain  <jbevain@novell.com>
 
        * Mono.Cecil.Cil/CilWorker.cs:
index 7a25aab48f94f0cd4fb71301fb0ee7c8b1290c73..d17c50fb959a7924e4854689e94d45f5a41c00f2 100644 (file)
@@ -74,10 +74,20 @@ namespace Mono.Cecil {
                        if (t.HasElementType) {
                                if (t.IsPointer)
                                        return string.Concat (GetTypeSignature (t.GetElementType ()), "*");
-                               else if (t.IsArray) // deal with complex arrays
-                                       return string.Concat (GetTypeSignature (t.GetElementType ()), "[]");
-                               else if (t.IsByRef)
-                                       return string.Concat (GetTypeSignature (t.GetElementType ()), "&");
+                               else if (t.IsArray) {
+                                       int rank = t.GetArrayRank ();
+                                       if (rank == 1)
+                                               return string.Concat (GetTypeSignature (t.GetElementType ()), "[]");
+
+                                       StringBuilder sb = new StringBuilder ();
+                                       sb.Append ('[');
+                                       for (int i = 1; i < rank; i++)
+                                               sb.Append (',');
+                                       sb.Append (']');
+
+                                       return string.Concat (GetTypeSignature (t.GetElementType ()), sb.ToString ());
+                               } else if (t.IsByRef)
+                                       return string.Concat(GetTypeSignature(t.GetElementType()), "&");
                        }
 
                        if (IsGenericTypeSpec (t)) {
@@ -186,8 +196,8 @@ namespace Mono.Cecil {
                                t = (Type) s.Pop ();
                                if (t.IsPointer)
                                        elementType = new PointerType (elementType);
-                               else if (t.IsArray) // deal with complex arrays
-                                       elementType = new ArrayType (elementType);
+                               else if (t.IsArray)
+                                       elementType = new ArrayType (elementType, t.GetArrayRank ());
                                else if (t.IsByRef)
                                        elementType = new ReferenceType (elementType);
                                else if (IsGenericTypeSpec (t))
@@ -254,7 +264,7 @@ namespace Mono.Cecil {
                        SR.ParameterInfo [] parameters = meth.GetParameters ();
                        for (int i = 0; i < parameters.Length; i++) {
                                if (i > 0)
-                                       sb.Append (", ");
+                                       sb.Append (",");
                                sb.Append (GetTypeSignature (parameters [i].ParameterType));
                        }
                        sb.Append (")");