Remi, Yes, one reason is resolution peculiarities of exception class not located on boot classpath.
The other reason is enabling extensive sharing of lambda forms. Best regards, Vladimir Ivanov On 2/21/14 4:33 PM, Remi Forax wrote: > 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-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev