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. John, Remi, I'd like your opinion on that. -- Christian --- /Users/twisti/bsd-port/bsd-port/jdk/src/share/classes/sun/dyn/util/ ValueConversions.java 2010-11-12 10:04:15.000000000 +0100 +++ sun/dyn/util/ValueConversions.java 2010-11-12 11:51:29.000000000 +0100 @@ -52,42 +52,61 @@ static int unboxInteger(Object x) { if (x == null) return 0; // never NPE - return ((Integer) x).intValue(); + if (x instanceof Boolean ) return (int) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (int) ((Character) x).charValue(); + return ((Number) x).intValue(); } static byte unboxByte(Object x) { if (x == null) return 0; // never NPE - return ((Byte) x).byteValue(); + if (x instanceof Boolean ) return (byte) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (byte) ((Character) x).charValue(); + return ((Number) x).byteValue(); } static short unboxShort(Object x) { if (x == null) return 0; // never NPE - return ((Short) x).shortValue(); + if (x instanceof Boolean ) return (short) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (short) ((Character) x).charValue(); + return ((Number) x).shortValue(); } static boolean unboxBoolean(Object x) { if (x == null) return false; // never NPE - return ((Boolean) x).booleanValue(); + if (x instanceof Boolean ) return ((Boolean) x).booleanValue(); + if (x instanceof Character) return ((Character) x).charValue() != 0; + if (x instanceof Long ) return ((Long) x).longValue() != 0L; + if (x instanceof Float ) return ((Float) x).floatValue() != 0.0f; + if (x instanceof Double ) return ((Double) x).doubleValue() != 0.0d; + return ((Number) x).intValue() != 0; } static char unboxCharacter(Object x) { if (x == null) return 0; // never NPE + if (x instanceof Boolean) return (char) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Number ) return (char) ((Number) x).intValue(); return ((Character) x).charValue(); } static long unboxLong(Object x) { if (x == null) return 0; // never NPE - return ((Long) x).longValue(); + if (x instanceof Boolean ) return (long) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (long) ((Character) x).charValue(); + return ((Number) x).longValue(); } static float unboxFloat(Object x) { if (x == null) return 0; // never NPE - return ((Float) x).floatValue(); + if (x instanceof Boolean ) return (float) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (float) ((Character) x).charValue(); + return ((Number) x).floatValue(); } static double unboxDouble(Object x) { if (x == null) return 0; // never NPE - return ((Double) x).doubleValue(); + if (x instanceof Boolean ) return (double) (((Boolean) x).booleanValue() ? 1 : 0); + if (x instanceof Character) return (double) ((Character) x).charValue(); + return ((Number) x).doubleValue(); } /// Converting references to "raw" values. _______________________________________________ mlvm-dev mailing list [email protected] http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
