All primitive type wrappers (including Character and Boolean) now have proper valueOf implementation
1.1 --- a/rt/emul/mini/src/main/java/java/lang/Boolean.java Thu Feb 28 09:50:14 2013 +0100
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Boolean.java Thu Feb 28 10:39:40 2013 +0100
1.3 @@ -25,6 +25,8 @@
1.4
1.5 package java.lang;
1.6
1.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.8 +
1.9 /**
1.10 * The Boolean class wraps a value of the primitive type
1.11 * {@code boolean} in an object. An object of type
1.12 @@ -279,4 +281,13 @@
1.13 private static boolean toBoolean(String name) {
1.14 return ((name != null) && name.equalsIgnoreCase("true"));
1.15 }
1.16 + static {
1.17 + // as last step of initialization, initialize valueOf method
1.18 + initValueOf();
1.19 + }
1.20 + @JavaScriptBody(args = { }, body =
1.21 + "vm.java_lang_Boolean(false)" +
1.22 + ".valueOf = function() { return this._value(); };"
1.23 + )
1.24 + private native static void initValueOf();
1.25 }
2.1 --- a/rt/emul/mini/src/main/java/java/lang/Character.java Thu Feb 28 09:50:14 2013 +0100
2.2 +++ b/rt/emul/mini/src/main/java/java/lang/Character.java Thu Feb 28 10:39:40 2013 +0100
2.3 @@ -2516,4 +2516,14 @@
2.4 return (char) (((ch & 0xFF00) >> 8) | (ch << 8));
2.5 }
2.6
2.7 + static {
2.8 + // as last step of initialization, initialize valueOf method
2.9 + initValueOf();
2.10 + }
2.11 + @JavaScriptBody(args = {}, body =
2.12 + "vm.java_lang_Character(false)." +
2.13 + "valueOf = function() { return this._value(); };"
2.14 + )
2.15 + private native static void initValueOf();
2.16 +
2.17 }
3.1 --- a/rt/emul/mini/src/main/java/java/lang/Number.java Thu Feb 28 09:50:14 2013 +0100
3.2 +++ b/rt/emul/mini/src/main/java/java/lang/Number.java Thu Feb 28 10:39:40 2013 +0100
3.3 @@ -27,7 +27,6 @@
3.4
3.5 import org.apidesign.bck2brwsr.core.ExtraJavaScript;
3.6 import org.apidesign.bck2brwsr.core.JavaScriptBody;
3.7 -import org.apidesign.bck2brwsr.core.JavaScriptOnly;
3.8 import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
3.9
3.10 /**
4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Feb 28 09:50:14 2013 +0100
4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Feb 28 10:39:40 2013 +0100
4.3 @@ -185,6 +185,25 @@
4.4 Double.valueOf(Long.MAX_VALUE / 5), 9
4.5 );
4.6 }
4.7 + @Test public void valueOfLongCharA() throws Exception {
4.8 + assertExec("Can we call JavaScripts valueOf on Character?",
4.9 + Numbers.class, "seven__DI",
4.10 + Double.valueOf('A'), 65
4.11 + );
4.12 + }
4.13 +
4.14 + @Test public void valueOfLongBooleanTrue() throws Exception {
4.15 + assertExec("Can we call JavaScripts valueOf on Boolean?",
4.16 + Numbers.class, "seven__DI",
4.17 + Double.valueOf(1), 31
4.18 + );
4.19 + }
4.20 + @Test public void valueOfLongBooleanFalse() throws Exception {
4.21 + assertExec("Can we call JavaScripts valueOf on Boolean?",
4.22 + Numbers.class, "seven__DI",
4.23 + Double.valueOf(0), 30
4.24 + );
4.25 + }
4.26
4.27 private static TestVM code;
4.28
5.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Thu Feb 28 09:50:14 2013 +0100
5.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Thu Feb 28 10:39:40 2013 +0100
5.3 @@ -78,6 +78,9 @@
5.4 case 4: return sevenNew().byteValue();
5.5 case 8: return valueOf(Double.valueOf(7.0));
5.6 case 9: return valueOf(Long.valueOf(Long.MAX_VALUE / 5));
5.7 + case 30: return valueOf(Boolean.FALSE);
5.8 + case 31: return valueOf(Boolean.TRUE);
5.9 + case 65: return valueOf(Character.valueOf('A'));
5.10 default: throw new IllegalStateException();
5.11 }
5.12 }