Merging fix for array class constant pool reference emul
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 24 Jan 2013 00:12:07 +0100
branchemul
changeset 570cd58f129328a
parent 569 081f019bc04e
parent 567 62dd2c794431
child 573 d3a0383d01d3
Merging fix for array class constant pool reference
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Jan 24 00:10:23 2013 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Jan 24 00:12:07 2013 +0100
     1.3 @@ -1416,8 +1416,12 @@
     1.4          String[] classRef = { null };
     1.5          String s = jc.stringValue(entryIndex, classRef);
     1.6          if (classRef[0] != null) {
     1.7 -            addReference(classRef[0]);
     1.8 -            s = accessClass(s.replace('/', '_')) + "(false).constructor.$class";
     1.9 +            if (classRef[0].startsWith("[")) {
    1.10 +                s = accessClass("java_lang_Class") + "(false).forName__Ljava_lang_Class_2Ljava_lang_String_2('" + classRef[0] + "');";
    1.11 +            } else {
    1.12 +                addReference(classRef[0]);
    1.13 +                s = accessClass(s.replace('/', '_')) + "(false).constructor.$class";
    1.14 +            }
    1.15          }
    1.16          return s;
    1.17      }
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java	Thu Jan 24 00:10:23 2013 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java	Thu Jan 24 00:12:07 2013 +0100
     2.3 @@ -108,6 +108,10 @@
     2.4          return sum;
     2.5      }
     2.6      
     2.7 +    public static String objectArrayClass() {
     2.8 +        return Object[].class.getName();
     2.9 +    }
    2.10 +    
    2.11      public static int sum(int size) {
    2.12          int[] arr = new int[size];
    2.13          return arr[0] + arr[1];
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Thu Jan 24 00:10:23 2013 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Thu Jan 24 00:12:07 2013 +0100
     3.3 @@ -68,6 +68,10 @@
     3.4      @Test public void doesCopyArrayWork() throws Exception {
     3.5          assertExec("Returns 'a'", Array.class, "copyArray__C", Double.valueOf('a'));
     3.6      }
     3.7 +
     3.8 +    @Test public void verifyObjectArrayClass() throws Exception {
     3.9 +        assertExec("Returns 'Object[]'", Array.class, "objectArrayClass__Ljava_lang_String_2", Array.objectArrayClass());
    3.10 +    }
    3.11      
    3.12      private static CharSequence codeSeq;
    3.13      private static Invocable code;