I ran the compile against what's in b144, but directly from the JDK7 repo

On 2011-05-27 12.26, John Rose wrote:
> On May 26, 2011, at 11:38 PM, Ola Bini wrote:
> 
>> It seems there is still a difference in how asType MHs work between what
>> is in current JDK7 repo, and what you get from building bsdport with
>> mlvm patches. Specifically, when running things with bsdport/mlvm they
>> work. When running on JDK7 (built about 30 minutes ago) I get this:
> 
> There are changes to asType in meth-review-7032323.patch.
> 
> I just committed that change set a few hours ago here:
>   http://hg.openjdk.java.net/hsx/hotspot-comp/jdk
> 
> I hope it will be in b145, although we are still figuring this out.
> 
> Are you comparing against b143 or b144 (which just came out a few minutes 
> ago)?  (It should not matter very much; just asking.)
> 
>> Caused by: java.lang.IllegalArgumentException: target and fallback types
>> must match: (SephObject,Object,Object,Object,Object)Object !=
>> (SephObject,SephObject,SThread,LexicalScope,MethodHandle)SephObject
> 
> This mismatch is being correctly reported.  The change is probably in the 
> logic that created one of the inputs to GWT.
> 
>>      at
>> java.lang.invoke.MethodHandleStatics.newIllegalArgumentException(MethodHandleStatics.java:87)
>>      at
>> java.lang.invoke.MethodHandles.misMatchedTypes(MethodHandles.java:2074)
>>      at
>> java.lang.invoke.MethodHandles.guardWithTest(MethodHandles.java:2058)
>>      at
>> seph.lang.compiler.SephCallSite.computeSlowPath(SephCallSite.java:149)
>>      at seph.lang.compiler.SephCallSite.<init>(SephCallSite.java:46)
>>      at seph.lang.compiler.SephCallSite.bootstrap(SephCallSite.java:31)
>>      at java.lang.invoke.CallSite.makeSite(CallSite.java:276)
>>
>> John, do you have any idea of what's missing to make this work in JDK7 too?
> 
> Please recheck your use of MethodHandles.invoker or 
> MethodHandles.spreadInvoker.  The behavior was seriously out of sync. with 
> the docs, and the docs were unclear.  The latest behavior should be correct 
> and clearly documented.
> 
> If in doubt, you can apply asType to your invoker to make sure it has the 
> type you expect.
Yes, that's exactly what I'm doing. The spreader makes it all a Object
arguments, and I then use asType to make them into the types they really
are.

Am I misunderstanding things here?

The place that is doing the work is this:
  MethodHandle _insertArguments =
          insertArguments(findStatic(MethodHandles.class,
                    "insertArguments",
                        methodType(MethodHandle.class,
                                   MethodHandle.class,
                                   int.class,
                                   Object[].class)),
                    1,
                    0).asCollector(Object[].class,
                     type().parameterCount()).
                          asType(type().insertParameterTypes(0,
                                                     MethodHandle.class)
                                 .changeReturnType(MethodHandle.class));


Sorry for the obscuring going on. =/


Cheers
-- 
 Ola Bini (http://olabini.com)
  Ioke - JRuby - ThoughtWorks

 "Yields falsehood when quined" yields falsehood when quined.

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to