I did test my generated code for Invokedynamic with Remi's backport.
The transformation works fine, but some APIs seem to be different.
I used b61 APIs, which contain
MethodHandles.insertArgument(MethodHandle, int, Object),
while the backport comes with the newer version of APIs.
I ran on Cygwin with the following command:
$ java -javaagent:backport/jsr292-backport.jar -cp
".;./target/classes" g7.tests.classgen.Fib
Here's the stack trace:
Exception in thread "main" java.lang.NoSuchMethodError:
jsr292.java.dyn.MethodHandles.insertArgument(Ljsr292/java/dyn/MethodHandle;ILjava/lang/Object;)Ljsr292/java/dyn/MethodHandle;
at com.chanwit.g7.runtime.G7Bootstrap.bootstrap(G7Bootstrap.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at jsr292.java.dyn.MHLookupUnreflectMethod.invoke(MHLookupUnreflectMethod.java:29)
at jsr292.java.dyn.MHLookupUnreflectMethod.$invoke$(MHLookupUnreflectMethod.java:73)
at jsr292.java.dyn.BootstrapCallSite.bootstrapCallSite(BootstrapCallSite.java:30)
at jsr292.java.dyn.BootstrapCallSite$BootstrapInvoker.$invoke$(BootstrapCallSite.java:81)
at g7.tests.classgen.Fib.$indy_stub6$(Fib.groovy)
at g7.tests.classgen.Fib.main(Fib.groovy)
Cheers.
Chanwit
--
Chanwit Kaewkasi
PhD Candidate,
Centre for Novel Computing
School of Computer Science
The University of Manchester
Oxford Road
Manchester
M13 9PL, UK
Here, insertArgument was renamed insertArguments, notice the last 's'.
see http://www.mail-archive.com/mlvm...@openjdk.java.net/msg00681.html
Rémi
Chanwit Kaewkasi a écrit :
You're right, your code trigger a recompilation of 3 invokedynamic calls and
stupidly fail :(
Could you jar all the classes in target and . and send them to me ?
(using my private email address)
> methodInfo map {$indy_stub2$=INDY_INVOKE:delegate(invoke class
> java.lang.Object fib[class java.lang.Object]),
> $indy_stub1$=INDY_INVOKE:delegate(invoke class java.lang.Integer
> minus[class java.lang.Integer, class java.lang.Integer]),
> $indy_stub0$=INDY_INVOKE:delegate(invoke class java.lang.Boolean
> __lt__[class java.lang.Integer, class java.lang.Integer])}
>
[...]
Rémi