On Jan 11, 2011, at 10:13 PM, John Rose wrote:
> On Jan 11, 2011, at 7:30 AM, Christian Thalinger wrote:
>> On Nov 12, 2010, at 2:42 PM, Christian Thalinger wrote:
>>> On Nov 12, 2010, at 2:35 PM, Rémi Forax wrote:
>>>> Le 12/11/2010 12:26, Christian Thalinger a écrit :
>>>>> As I have already said, I'm not expert here but these changes let all
>>>>> tests of this testcase pass:
>>>>> 
>>>>> http://cr.openjdk.java.net/~twisti/6998541/webrev.00/test/compiler/6998541/Test6998541.java.html
>>>>> 
>>>>> I'm not sure if the assumption is correct that every non-zero
>>>>> primitive value is a boolean true.
> 
> Values of subword types (short, char, byte, boolean) are assumed to be 
> confined to their ranges.  For boolean, that range is [0,1].  The verifier 
> does not enforce this, however.
> 
>>>>> John, Remi, I'd like your opinion on that.
>>>>> 
>>>>> -- Christian
>>>> 
>>>> Christian,
>>>> methods unboxRaw call unbox versions, so you have also changed
>>>> the semantics of all methods unboxRaw which seems a bad idea.
>>> 
>>> 
>>> Yeah, I'm also a bit worried about that.  I think I leave that up to  
>>> John to fix it properly.
> 
> The "raw" retype transforms are not directly accessible to users.  They are 
> used by trusted code, which promises that any value will continue to be valid 
> in its new type, after the raw retype.
> 
> In the case of booleans, this means that a raw retype operation from int to 
> boolean will always operate on a normalized value that was either (int)1 or 
> (int)0.
> 
>> John, is that actually a bug?  -- Christian
> 
> I don't see a bug here.

Should it be possible to change the return type from e.g. int to short with 
something like:

        MethodHandle mh1 = MethodHandles.identity(int.class);                   
                                                                               
        MethodHandle mh2 = MethodHandles.convertArguments(mh1, 
MethodType.methodType(short.class, int.class));                                 
                 
        short s = (short) mh2.invokeExact(123);                                 
                                                                               

Because what I get here is:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer 
cannot be cast to java.lang.Short
        at sun.dyn.util.ValueConversions.unboxShort(ValueConversions.java:66)
        at 
sun.dyn.util.ValueConversions.unboxShortRaw(ValueConversions.java:102)
        at sun.dyn.ToGeneric$Adapter.return_I(ToGeneric.java:393)
        at sun.dyn.ToGeneric$A1.invoke_I(ToGeneric.java:643)
        at Test.main(Test.java:7)

-- Christian
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to