dropArguments still NYI?
Charles Oliver Nutter
charles.nutter at sun.com
Sat May 30 12:16:54 PDT 2009
John: You were right...I was confused by "qrefresh" which does not
refresh applied patches as I suspected. By running qrefresh after
updating the patch repo, I overwrote the updated indy with my original
one from pre-dropArguments. Mea culpa; it's working now.
But of course I now run into a new issue :) The handle resulting from
dropArguments appears to not support a subsequent insert of an argument.
So drop + insert leads to NYI.
Here's the new single test method:
public static boolean test(CacheEntry entry, IRubyObject self) {
return entry.typeOk(self.getMetaClass());
}
Here's the base handle:
private static final MethodHandle TEST = MethodHandles.dropArguments(
MethodHandles.lookup().findStatic(InvokeDynamicSupport.class, "test",
MethodType.make(boolean.class, CacheEntry.class,
IRubyObject.class)),
1,
ThreadContext.class, IRubyObject.class);
Here's the next layer of dropArguments, for the arity-specific handle
(1-arity in this case):
private static final MethodHandle TEST_1 =
MethodHandles.dropArguments(TEST, 2, String.class, IRubyObject.class);
And here's the insertArguments call, upon the first time a gWT is installed:
private static MethodHandle createGWT(MethodHandle test,
MethodHandle target, MethodHandle fallback, CacheEntry entry, CallSite
site) {
MethodHandle myTest = MethodHandles.insertArgument(test, 0, entry);
MethodHandle myTarget = MethodHandles.insertArgument(target, 0,
entry);
MethodHandle myFallback =
MethodHandles.insertArgument(fallback, 0, site);
MethodHandle guardWithTest =
MethodHandles.guardWithTest(myTest, myTarget, myFallback);
return MethodHandles.convertArguments(guardWithTest, site.type());
}
I believe I'm doing all this right. Poking around the code now.
Charles Oliver Nutter wrote:
> I saw jrose land a dropArguments fix a day or two ago, but it still
> seems to be coming up NYI for me:
>
> ~/projects/jruby ➔ JAVA_HOME=$MLVM_HOME JAVA_OPTS=$INDY_OPTS jruby -d -e
> "puts 1"
> could not compile: -e because of: "null"
> java.lang.ExceptionInInitializerError
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:186)
> at
> org.jruby.compiler.impl.StandardASMCompiler.<clinit>(StandardASMCompiler.java:127)
> at org.jruby.Ruby.tryCompile(Ruby.java:536)
> at org.jruby.Ruby.tryCompile(Ruby.java:524)
> at org.jruby.Ruby.runNormally(Ruby.java:505)
> at org.jruby.Ruby.runFromMain(Ruby.java:361)
> at org.jruby.Main.run(Main.java:268)
> at org.jruby.Main.run(Main.java:113)
> at org.jruby.Main.main(Main.java:97)
> Caused by: java.lang.UnsupportedOperationException: NYI
> at sun.dyn.MethodHandleImpl.dropArguments(MethodHandleImpl.java:301)
> at java.dyn.MethodHandles.dropArguments(MethodHandles.java:1021)
> at
> org.jruby.runtime.invokedynamic.InvokeDynamicSupport.<clinit>(InvokeDynamicSupport.java:388)
>
> Here's the code in syn/dyn/MethodHandleImpl.java:
>
> public static
> MethodHandle dropArguments(Access token, MethodHandle target,
> MethodType newType, int argnum) {
> Access.check(token);
> throw new UnsupportedOperationException("NYI");
> }
>
> I certainly could have things applied incorrectly, but I could find no
> updates to MethodHandleImpl.java in patches/jdk/indy.patch
>
> - Charlie
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
More information about the mlvm-dev
mailing list