1st parameter of bootstrap method - the Lookup - is correct jdk8
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 10 Aug 2014 11:32:38 +0200
branchjdk8
changeset 1659d279ddd06652
parent 1658 3e5087bd13c1
child 1660 2f22f2a2175d
1st parameter of bootstrap method - the Lookup - is correct
rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java
     1.1 --- a/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java	Sun Aug 10 10:37:23 2014 +0200
     1.2 +++ b/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandles.java	Sun Aug 10 11:32:38 2014 +0200
     1.3 @@ -142,6 +142,14 @@
     1.4      // Copied from AccessibleObject, as used by Method.setAccessible, etc.:
     1.5  //    static final private java.security.Permission ACCESS_PERMISSION =
     1.6  //        new ReflectPermission("suppressAccessChecks");
     1.7 +    
     1.8 +    static Lookup findFor(Class<?> clazz) {
     1.9 +        Object o = clazz;
    1.10 +        if (o instanceof Class) {
    1.11 +            return new Lookup(clazz, Lookup.ALL_MODES);
    1.12 +        }
    1.13 +        throw new IllegalArgumentException("Expecting class: " + o);
    1.14 +    }
    1.15  
    1.16      /**
    1.17       * A <em>lookup object</em> is a factory for creating method handles,
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Aug 10 10:37:23 2014 +0200
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Aug 10 11:32:38 2014 +0200
     2.3 @@ -1076,6 +1076,8 @@
     2.4                      append("var metHan = ");
     2.5                      append(accessStaticMethod(object, mn, mi));
     2.6                      append('(');
     2.7 +                    String lookup = accessClass("java_lang_invoke_MethodHandles") + "(false).findFor__Ljava_lang_invoke_MethodHandles$Lookup_2Ljava_lang_Class_2(CLS.$class)";
     2.8 +                    append(lookup);
     2.9  //                    if (numArguments > 0) {
    2.10  //                        append(vars[0]);
    2.11  //                        for (int j = 1; j < numArguments; ++j) {
     3.1 --- a/rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java	Sun Aug 10 10:37:23 2014 +0200
     3.2 +++ b/rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/InvokeDynamic.java	Sun Aug 10 11:32:38 2014 +0200
     3.3 @@ -37,6 +37,7 @@
     3.4          assertReal("1st parameter lookup", lookup);
     3.5          assertReal("2nd parameter name", name);
     3.6          assertReal("3rd parameter type", type);
     3.7 +        assert lookup.lookupClass() == InvokeDynamic.class : "We are making the lookup: " + lookup.lookupClass();
     3.8          try {
     3.9              return new ConstantCallSite(lookup.findVirtual(InvokeDynamic.class, "instance_sayHello", MethodType.methodType(String.class)));
    3.10          } catch (NoSuchMethodException | IllegalAccessException e) {