On 04/21/2011 09:59 AM, Mark Roos wrote:
Thanks for the update ( even if the class names are not orthogonal to
invoke dynamic)
Two questions on usage
In your blog you used MH_GETSTATIC to access the bootstrap. Did you
mean to use MH_INVOKESTATIC ?
Yes !
I would like to use a bootstrap signature of: ( no trailing arguments)
* static*ConstantCallSite
bootStrapConstant(MethodHandles.Lookup callerLookup, String template,
MethodType type)
But I can't figure out how to invoke that in ASM. My current code is:
bsmType =
java.lang.invoke.MethodType./methodType/(ConstantCallSite.*class*,
Lookup.*class*, String.*class*, java.lang.invoke.MethodType.*class*,
Object.*class*);;
mv.visitInvokeDynamicInsn( bsmName, "()Lri/core/rtalk/RtObject;",
* new*MethodHandle(Opcodes./MH_INVOKESTATIC/,
"ri/core/rtalk/RtCallSite",
"bootStrapConstant",
bsmType.toMethodDescriptorString()),
(Object[]) *new*String[1]);
How would I change it for the above bootstrap?
Your bsmType declare a boostrap argument, the last parameter is an Object.
so bsmType should be:
bsmType =
java.lang.invoke.MethodType./methodType/(ConstantCallSite.*class*,
Lookup.*class*, String.*class*, java.lang.invoke.MethodType.*class*);
Now, the formal parameter corresponding to the boostrap arguments
in visitInvokeDynamicInsn is declared Object... , the elipsis/variadic
'...' accept 0 or more
arguments separated by a comma.
So you can write:
mv.visitInvokeDynamicInsn( bsmName, "()Lri/core/rtalk/RtObject;",
* new*MethodHandle(Opcodes./MH_INVOKESTATIC/,
"ri/core/rtalk/RtCallSite",
"bootStrapConstant",
bsmType.toMethodDescriptorString()));
By the way, I know how to recognize a Caml guy that write Java code,
take a look to the last characters of your first line of code. ;;)
thanks much
mark
Rémi
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev