# HG changeset patch # User Jaroslav Tulach # Date 1407663158 -7200 # Node ID d279ddd06652af077cbb2b466913fc097441da6a # Parent 3e5087bd13c17559f58ce63f2305a9fdaffc0a43 1st parameter of bootstrap method - the Lookup - is correct diff -r 3e5087bd13c1 -r d279ddd06652 rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java --- a/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java Sun Aug 10 10:37:23 2014 +0200 +++ b/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java Sun Aug 10 11:32:38 2014 +0200 @@ -142,6 +142,14 @@ // Copied from AccessibleObject, as used by Method.setAccessible, etc.: // static final private java.security.Permission ACCESS_PERMISSION = // new ReflectPermission("suppressAccessChecks"); + + static Lookup findFor(Class clazz) { + Object o = clazz; + if (o instanceof Class) { + return new Lookup(clazz, Lookup.ALL_MODES); + } + throw new IllegalArgumentException("Expecting class: " + o); + } /** * A lookup object is a factory for creating method handles, diff -r 3e5087bd13c1 -r d279ddd06652 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Aug 10 10:37:23 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Aug 10 11:32:38 2014 +0200 @@ -1076,6 +1076,8 @@ append("var metHan = "); append(accessStaticMethod(object, mn, mi)); append('('); + String lookup = accessClass("java_lang_invoke_MethodHandles") + "(false).findFor__Ljava_lang_invoke_MethodHandles$Lookup_2Ljava_lang_Class_2(CLS.$class)"; + append(lookup); // if (numArguments > 0) { // append(vars[0]); // for (int j = 1; j < numArguments; ++j) { diff -r 3e5087bd13c1 -r d279ddd06652 rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java --- a/rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java Sun Aug 10 10:37:23 2014 +0200 +++ b/rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java Sun Aug 10 11:32:38 2014 +0200 @@ -37,6 +37,7 @@ assertReal("1st parameter lookup", lookup); assertReal("2nd parameter name", name); assertReal("3rd parameter type", type); + assert lookup.lookupClass() == InvokeDynamic.class : "We are making the lookup: " + lookup.lookupClass(); try { return new ConstantCallSite(lookup.findVirtual(InvokeDynamic.class, "instance_sayHello", MethodType.methodType(String.class))); } catch (NoSuchMethodException | IllegalAccessException e) {