ValueConversion.unbox* fixes(?)
Rémi Forax
forax at univ-mlv.fr
Fri Nov 12 05:35:49 PST 2010
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.
>
> 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.
Rémi
>
> --- /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
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
More information about the mlvm-dev
mailing list