Implementing String's intern()
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 31 Oct 2013 15:01:35 +0100
changeset 1402e896bc687984
parent 1401 9aeb2a41e009
child 1403 8120793cc756
Implementing String's intern()
rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java
rt/emul/mini/src/main/java/java/lang/String.java
     1.1 --- a/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java	Thu Oct 31 11:36:52 2013 +0100
     1.2 +++ b/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java	Thu Oct 31 15:01:35 2013 +0100
     1.3 @@ -49,6 +49,14 @@
     1.4          return "Ahoj".equals(null);
     1.5      }
     1.6      
     1.7 +    @Compare public boolean internIsSame() {
     1.8 +        return new String("Ahoj").intern() == another();
     1.9 +    }
    1.10 +    
    1.11 +    private static String another() {
    1.12 +        return new String("Ahoj").intern();
    1.13 +    }
    1.14 +    
    1.15      @Compare public int highByteLenght() {
    1.16          byte[] arr= { 77,97,110,105,102,101,115,116,45,86,101,114,115,105,111,110 };
    1.17          return new String(arr, 0).length();
     2.1 --- a/rt/emul/mini/src/main/java/java/lang/String.java	Thu Oct 31 11:36:52 2013 +0100
     2.2 +++ b/rt/emul/mini/src/main/java/java/lang/String.java	Thu Oct 31 15:01:35 2013 +0100
     2.3 @@ -3109,6 +3109,14 @@
     2.4       * @return  a string that has the same contents as this string, but is
     2.5       *          guaranteed to be from a pool of unique strings.
     2.6       */
     2.7 +    @JavaScriptBody(args = {}, body = 
     2.8 +        "var s = this.toString().toString();\n" +
     2.9 +        "var i = String.intern || (String.intern = {})\n" + 
    2.10 +        "if (!i[s]) {\n" +
    2.11 +        "  i[s] = s;\n" +
    2.12 +        "}\n" +
    2.13 +        "return i[s];"
    2.14 +    )
    2.15      public native String intern();
    2.16      
    2.17