# HG changeset patch # User Jaroslav Tulach # Date 1362044380 -3600 # Node ID af4001c854384ad3d49dac07460c09f05e3b7676 # Parent da63749558e216ed68ca488900958ee858847bdb All primitive type wrappers (including Character and Boolean) now have proper valueOf implementation diff -r da63749558e2 -r af4001c85438 rt/emul/mini/src/main/java/java/lang/Boolean.java --- a/rt/emul/mini/src/main/java/java/lang/Boolean.java Thu Feb 28 09:50:14 2013 +0100 +++ b/rt/emul/mini/src/main/java/java/lang/Boolean.java Thu Feb 28 10:39:40 2013 +0100 @@ -25,6 +25,8 @@ package java.lang; +import org.apidesign.bck2brwsr.core.JavaScriptBody; + /** * The Boolean class wraps a value of the primitive type * {@code boolean} in an object. An object of type @@ -279,4 +281,13 @@ private static boolean toBoolean(String name) { return ((name != null) && name.equalsIgnoreCase("true")); } + static { + // as last step of initialization, initialize valueOf method + initValueOf(); + } + @JavaScriptBody(args = { }, body = + "vm.java_lang_Boolean(false)" + + ".valueOf = function() { return this._value(); };" + ) + private native static void initValueOf(); } diff -r da63749558e2 -r af4001c85438 rt/emul/mini/src/main/java/java/lang/Character.java --- a/rt/emul/mini/src/main/java/java/lang/Character.java Thu Feb 28 09:50:14 2013 +0100 +++ b/rt/emul/mini/src/main/java/java/lang/Character.java Thu Feb 28 10:39:40 2013 +0100 @@ -2516,4 +2516,14 @@ return (char) (((ch & 0xFF00) >> 8) | (ch << 8)); } + static { + // as last step of initialization, initialize valueOf method + initValueOf(); + } + @JavaScriptBody(args = {}, body = + "vm.java_lang_Character(false)." + + "valueOf = function() { return this._value(); };" + ) + private native static void initValueOf(); + } diff -r da63749558e2 -r af4001c85438 rt/emul/mini/src/main/java/java/lang/Number.java --- a/rt/emul/mini/src/main/java/java/lang/Number.java Thu Feb 28 09:50:14 2013 +0100 +++ b/rt/emul/mini/src/main/java/java/lang/Number.java Thu Feb 28 10:39:40 2013 +0100 @@ -27,7 +27,6 @@ import org.apidesign.bck2brwsr.core.ExtraJavaScript; import org.apidesign.bck2brwsr.core.JavaScriptBody; -import org.apidesign.bck2brwsr.core.JavaScriptOnly; import org.apidesign.bck2brwsr.core.JavaScriptPrototype; /** diff -r da63749558e2 -r af4001c85438 rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Feb 28 09:50:14 2013 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Feb 28 10:39:40 2013 +0100 @@ -185,6 +185,25 @@ Double.valueOf(Long.MAX_VALUE / 5), 9 ); } + @Test public void valueOfLongCharA() throws Exception { + assertExec("Can we call JavaScripts valueOf on Character?", + Numbers.class, "seven__DI", + Double.valueOf('A'), 65 + ); + } + + @Test public void valueOfLongBooleanTrue() throws Exception { + assertExec("Can we call JavaScripts valueOf on Boolean?", + Numbers.class, "seven__DI", + Double.valueOf(1), 31 + ); + } + @Test public void valueOfLongBooleanFalse() throws Exception { + assertExec("Can we call JavaScripts valueOf on Boolean?", + Numbers.class, "seven__DI", + Double.valueOf(0), 30 + ); + } private static TestVM code; diff -r da63749558e2 -r af4001c85438 rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Thu Feb 28 09:50:14 2013 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Thu Feb 28 10:39:40 2013 +0100 @@ -78,6 +78,9 @@ case 4: return sevenNew().byteValue(); case 8: return valueOf(Double.valueOf(7.0)); case 9: return valueOf(Long.valueOf(Long.MAX_VALUE / 5)); + case 30: return valueOf(Boolean.FALSE); + case 31: return valueOf(Boolean.TRUE); + case 65: return valueOf(Character.valueOf('A')); default: throw new IllegalStateException(); } }