On 01/17/2014 05:42 PM, Paul Sandoz wrote:
On Jan 17, 2014, at 5:09 PM, Brian Goetz <[email protected]> wrote:

Webrev at:
  http://cr.openjdk.java.net/~briangoetz/JDK-8031373/webrev/

If someone with ASM fu (Remi?) could sanity check the JLI changes, that would 
be appreciated.


Stream code looks good.

I notice some other things in StreamSpliterators that could potentially be 
cleaned up too:

- Might be a redundant cast:

  312                 ph.wrapAndCopyInto((Sink<P_OUT>) consumer::accept, 
spliterator);

- Error in JavaDoc:

1324      * The {@coe tryAdvance} method always returns true.

--

IIUC the ASM related updates are due to the deprecated method. The new method 
allows for invokespecial/static on methods of interfaces and placing the 
correct data in the constant pool. In which case i would expect all the updates 
to have a false as the last parameter, which is so. Still, as say Remi's eyes 
would be useful on this one.

Paul.

The ASM part is fine.
As Paul said, the last parameter should be true if the owner of the method call is an interface, so in case of an INVOKEVIRTUAL, it's always false, in case of an INVOKEINTERFACE, it's always true, for INVOKESPECIAL, if it's a call to a constructor ("<init>"), it's always false.

Given that the code either create classes or call wrapper classes (for boxing/unboxing).
All calls should use false.

<Nitpicking mode="on">
in TypeConvertingMethodAdapter, I think it's better if false was written on its own line like the other parameters.

visitMethodInsn(Opcodes.INVOKESTATIC,
                 wrapperName(w),
                 NAME_BOX_METHOD,
-                boxingDescriptor(w));
+                boxingDescriptor(w),
+                false);


</nitpicking>

cheers,
Rémi

Reply via email to