On 2010.03.25., at 3:17, Charles Oliver Nutter wrote: > For Attila: I had to remove a spreadArguments handle you used for > re-binding the method...not sure why. Here's the diff:
Turns out, now the MethodHandle.invokeVarargs() actually does the whole convert-to-generic-and-invoke-as-vararg, so I committed the definitive solution for it now, which is simply: Index: DynamicLinkerImpl.java =================================================================== --- DynamicLinkerImpl.java (revision 233) +++ DynamicLinkerImpl.java (revision 228) @@ -111,6 +111,12 @@ // Invoke the method. Note we bypass the guard, as the assumption is // that the current arguments will pass the guard (and there actually // might be no guard at all). - return guardedInvocation.getInvocation().invokeVarargs(arguments); + final MethodHandle invocation = guardedInvocation.getInvocation(); + final MethodType genericType = invocation.type().generic(); + final MethodHandle genericizedInvocation = + MethodHandles.convertArguments(invocation, genericType); + final MethodHandle spreadInvocation = MethodHandles.spreadArguments( + genericizedInvocation, SPREAD_GENERIC_INVOCATION); + return MethodHandles.invoke(spreadInvocation, arguments); } } (Mind you, this is a reverse diff, but I'm too sleepy now to fix it; just swap + and -) I think the problem was in the fact that the (now deprecated) MethodHandles.invoke() used to behave as "invokeExact" in the last August's builds (so that's why I had to genericize + spread explicitly), while now it maps to MethodHandle.invokeVarargs(), so in addition to it being deprecated, its behaviour was also changed in the past half a year and that broke things, as you have yourself experienced :-). Should be good now. BTW, Stephen Bannasch's MLVM build works completely okay - I abandoned the attempt to now build my own as it didn't work out quickly and I didn't want to waste a lot of time; his version + Java sources from Mercurial seem sufficient for debugging. I'm still not back to the old 6 unit test errors, but this patch reduced them from 18 to 8; seems there are still two genuine new issues. Attila. > > Index: src/org/dynalang/dynalink/support/DynamicLinkerImpl.java > =================================================================== > --- src/org/dynalang/dynalink/support/DynamicLinkerImpl.java (revision 232) > +++ src/org/dynalang/dynalink/support/DynamicLinkerImpl.java (working copy) > @@ -115,8 +115,6 @@ > final MethodType genericType = invocation.type().generic(); > final MethodHandle genericizedInvocation = > MethodHandles.convertArguments(invocation, genericType); > - final MethodHandle spreadInvocation = MethodHandles.spreadArguments( > - genericizedInvocation, SPREAD_GENERIC_INVOCATION); > - return MethodHandles.invoke(spreadInvocation, arguments); > + return MethodHandles.invoke(genericizedInvocation, arguments); > } > } > > I committed a built version with this hack...no tests, etc yet for > Duby's "dynamic" type, but that will come soon. > > BTW, what's the current state of the art for emitting .java with an > invokedynamic in it? Duby also has a .java backend, so I'll need to > add indy support there as well (somehow). > > - Charlie _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev