Problem with collectArguments on primitive array type

Attila Szegedi szegedia at gmail.com
Mon Aug 17 13:06:25 PDT 2009


Hi folks,

I have this program that doesn't work with mlvm build from August 4:

---------------------
import java.dyn.MethodHandle;
import java.dyn.MethodHandles;
import java.dyn.MethodType;

public class TestCollectArguments
{
     public static void main(String[] args) throws Throwable
     {
         MethodHandle xv = MethodHandles.publicLookup().findVirtual(
                 TestCollectArguments.class, "xv",  
MethodType.make(int.class,
                         int.class, int[].class));
         // This works - exact invocation
         System.out.println(MethodHandles.invoke(xv, new  
TestCollectArguments(),
                 1, new int[] { 2, 3 }));
         MethodHandle collecting = MethodHandles.collectArguments(xv,
                 MethodType.make(int.class, Object.class, int.class,  
int.class,
                         int.class));
         // This fails - collecting arguments
         System.out.println(MethodHandles.invoke(collecting,
                 new TestCollectArguments(), 1, 2, 3));
     }

     public int xv(int y, int... z)
     {
         for (int zz : z)
         {
             y += zz;
         }
         return y;
     }
}
---------------------

It throws:

Exception in thread "main" java.dyn.WrongMethodTypeException:  
[Ljava.lang.Object; cannot be cast to [I
	at sun.dyn.FromGeneric$A3.invoke_I3(FromGeneric.java:543)
	at sun.dyn.FilterGeneric$F4.invoke_C2(FilterGeneric.java:631)
	at sun.dyn.ToGeneric$A4.target(ToGeneric.java:746)
	at sun.dyn.ToGeneric$A4.targetA4(ToGeneric.java:750)
	at sun.dyn.ToGeneric$A4.invoke_I(ToGeneric.java:766)
	at sun.dyn.FromGeneric$A5.invoke_I5(FromGeneric.java:567)
	at java.dyn.MethodHandles.invoke(MethodHandles.java:638)
	at TestCollectArguments.main(TestCollectArguments.java:21)

Seems it has troubles collecting arguments for an int[] vararg.

Attila.




More information about the mlvm-dev mailing list