Hi Valdimir,
is there a reason to generate
  try {
    ...
  } catch(Throwable t) {
    if (Klass.isInstance(t)) {
      ...
    }
    throw t;
  }
instead of:
  try {
    ...
  } catch(Klass t) {
    ...
  }

maybe because the Klass can be resolved by the wrong classloader ?

Rémi

On 02/21/2014 12:59 PM, Vladimir Ivanov wrote:
Paul, thanks!

Best regards,
Vladimir Ivanov

On 2/21/14 2:11 PM, Paul Sandoz wrote:
On Feb 20, 2014, at 6:57 PM, Vladimir Ivanov <vladimir.x.iva...@oracle.com> 
wrote:

Paul,

Thanks for the feedback! See my answers inline.

Updated webrev:
http://cr.openjdk.java.net/~vlivanov/8027827/final/webrev.01/

I finally figured out how to make caching work. This webrev contains these 
changes.

+1


I changed LF representation a bit and added 2 auxiliary method handles - 
argument boxing and wrapping into Object[] and result unboxing. These 
operations depend on actual type and can't be shared among arbitrary 
combinators with the same basic type. They are used only during LF 
interpretation and are completely ignored in compiled LFs.


src/share/classes/java/lang/invoke/MethodHandleImpl.java

   634         // t_{i+2}:L=ValueConversions.unbox(t_{i+1}) OR 
ValueConversions.identity(t_{i+1})
   635         if (type.returnType().isPrimitive()) {
   636             names[UNBOX_RESULT] = new 
Name(ValueConversions.unbox(type.returnType()),
   637                                               names[TRY_CATCH]);
   638         } else {
   639             names[UNBOX_RESULT] = new Name(ValueConversions.identity(),
   640                                               names[TRY_CATCH]);
   641         }


You could create the form without the identity transform for the non-primitive 
case?

    final int UNBOX_RESULT = type.returnType().isPrimitive() ? nameCursor++ : 0;
...

    if (UNBOX_RESULT > 0) { ...
        names[UNBOX_RESULT] = new 
Name(ValueConversions.unbox(type.returnType()), names[TRY_CATCH]);
    }
I can, but it complicates matching and compiling the pattern in 
InvokerBytecodeGenerator. I decided to keep the shape uniform for all cases.

Ah, yes i see now, the code is simpler being kept uniform.

Paul.

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

Reply via email to