On Aug 25, 2011, at 11:23 PM, Jeroen Frijters wrote:

> I was surprised by this as well (from an implementers point of view), because 
> the use of asType is an implementation detail. Normally when you call a 
> method taking a boolean/byte/short/char you also load an int onto the stack, 
> so why would this case be any different?

When you call a function of type, say, (B), you are promising that the 32-bit 
int you loaded onto the stack fits into the declared subrange, say, -128..127.

(This is a little-known invariant of the verifier.  Although all primitive 
arguments and return values are passed in 32 and 64 bit containers, some of the 
32-bit values are required/guaranteed to be constrained to a subrange of 
values.)

So if you start with an arbitrary int value (as an ldc produces) you need an 
extra dynamic operation to force the value into the required subrange.

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

Reply via email to