Regression in newest MLVM build

John Rose john.r.rose at oracle.com
Tue Jun 14 17:49:16 PDT 2011


On Jun 14, 2011, at 5:21 PM, Attila Szegedi wrote:

> Thanks for the clarification, John. I'll go with asFixedArity(). 

Great!  BTW, this little method got into the API "by the skin of its teeth".

Here's an interesting related exercise:  If I have a variable-arity method handle (like #Arrays.asList), how do we convert it to a spreader with more fixed arguments?

  MethodHandle mh = #Arrays.asList;
  mh.invoke("foo", "bar");  //=> [foo, bar]
  mh.invoke("foo", "bar", "baz");  //=> [foo, bar, baz]
  MethodHandle mhFix1Fail = mh.asType(genericMethodType(1, true)).asVarargsCollector(Object[].class);
  mhFix1Fail.invoke("foo", "bar");  //=> [foo, [Ljava.lang.Object;@746d23]
  mhFix1Fail.invoke("foo", "bar", "baz");  //=> [foo, [Ljava.lang.Object;@746d23]
  MethodHandle mhFix1 = (???);
  mhFix1.invoke("foo", "bar");  //=> [foo, bar]
  mhFix1.invoke("foo", "bar", "baz");  //=> [foo, bar, baz]

It would be analogous to this Lisp (Scheme) code:
  (define mh list)
  (define mhFix1 (lambda (x . xs) (apply mh x xs)))

I don't think there's a unique minimal way to do this in the present API.  But the Cookbook probably needs an example.

> Super excited as for the first time in history, Dynalink will get down to 0 failing testcases as OpenJDK bugs making them fail got squashed, yay!

I'm super excited too.  (Also super tired.  Looking forward to a nice rest at the Summit!  :-) )

By the way, for an example of a really crunchy MH graph, see the second hunk in this diff:
  http://hg.openjdk.java.net/mlvm/mlvm/jdk/diff/af9f1edb308f/meth-unittests.patch

This didn't used to work just a few weeks ago...

-- John


More information about the mlvm-dev mailing list