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

Reply via email to