This program throw an Internal Error import java.dyn.MethodHandle; import java.dyn.MethodHandles; import java.dyn.MethodType;
public class MethodHandleInvocationTest { public static void sayHello(String message) { System.out.println("hello " + message); } public static void main(String[] args) { MethodHandle mh = MethodHandles.Lookup.PUBLIC_LOOKUP.findStatic(MethodHandleInvocationTest.class, "sayHello", MethodType.make(void.class, String.class)); mh.<void>invoke("jsr 292 backport"); } } Exception in thread "main" java.lang.InternalError at sun.dyn.MethodHandleImpl.<clinit>(MethodHandleImpl.java:112) at java.dyn.MethodHandles.<clinit>(MethodHandles.java:66) at java.dyn.MethodHandles$Lookup.<clinit>(MethodHandles.java:158) at MethodHandleInvocationTest.main(MethodHandleInvocationTest.java:11) I use the jdkb59 here, but the current mlvm repository patch seems to exhibit the same problem. MethodHandles$Lookup static init calls MethodHandles.<clinit> but *before* the call to initLookup(), the class MethodHandleImpl need to be initialized, so its <clinit> is called and raise the InternalError. static final Lookup IMPL_LOOKUP = new Lookup(null); static { MethodHandleImpl.initLookup(IMPL_TOKEN, IMPL_LOOKUP); A simple patch, even if it doesn't solve the real problem is to change the visibility of the constant PUBLIC_LOOKUP in Lookup and to provide an access through a method in MethodHandles public static Lookup lookup() { return new Lookup(); } public static Lookup publicLookup() { return Lookup.PUBLIC_LOOKUP; } cheers, Rémi _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev