On Jun 5, 2009, at 1:31 AM, Rémi Forax wrote: > This program throw an Internal Error > ... > 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; > }
That's a good fix, and in fact a better API than PUBLIC_LOOKUP. Let's use MHs.publicLookup() as the API. An alternate fix (and something I put in also just for stability) is to have MHs.Lookup trigger static initialization of MHs before it does anything else. -- John _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev