Hi,

Committed.

Regards,
Jeroen

2007-06-21  Jeroen Frijters  <[EMAIL PROTECTED]>

        Fixes #32356
        * java/lang/reflect/Array.java
        (newInstance(Class,int[])): Call createMultiArray correctly.
        (createMultiArray): Fixed dimensions processing order.

Index: java/lang/reflect/Array.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/reflect/Array.java,v
retrieving revision 1.16
diff -u -r1.16 Array.java
--- java/lang/reflect/Array.java        10 Dec 2006 20:25:45 -0000      1.16
+++ java/lang/reflect/Array.java        15 Jun 2007 15:22:47 -0000
@@ -147,8 +147,7 @@
   {
     if (dimensions.length <= 0)
       throw new IllegalArgumentException ("Empty dimensions array.");
-    return createMultiArray(componentType, dimensions,
-                                  dimensions.length - 1);
+    return createMultiArray(componentType, dimensions, 0);
   }

   /**
@@ -638,10 +637,10 @@
   private static Object createMultiArray(Class type, int[] dimensions,
                                          int index)
   {
-    if (index == 0)
-      return newInstance(type, dimensions[0]);
+    if (index == dimensions.length - 1)
+      return newInstance(type, dimensions[index]);

-    Object toAdd = createMultiArray(type, dimensions, index - 1);
+    Object toAdd = createMultiArray(type, dimensions, index + 1);
     Class thisType = toAdd.getClass();
     Object[] retval
       = (Object[]) VMArray.createObjectArray(thisType, dimensions[index]);
@@ -649,7 +648,7 @@
       retval[0] = toAdd;
     int i = dimensions[index];
     while (--i > 0)
-      retval[i] = createMultiArray(type, dimensions, index - 1);
+      retval[i] = createMultiArray(type, dimensions, index + 1);
     return retval;
   }


Reply via email to