All primitive type wrappers (including Character and Boolean) now have proper valueOf implementation
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 28 Feb 2013 10:39:40 +0100
changeset 791af4001c85438
parent 790 da63749558e2
child 792 0b32ef894ba6
All primitive type wrappers (including Character and Boolean) now have proper valueOf implementation
rt/emul/mini/src/main/java/java/lang/Boolean.java
rt/emul/mini/src/main/java/java/lang/Character.java
rt/emul/mini/src/main/java/java/lang/Number.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java
     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      }