# HG changeset patch # User Jaroslav Tulach # Date 1358982727 -3600 # Node ID cd58f129328aa735337c00bb6e7a7eb716d11638 # Parent 081f019bc04efba20898be840c71b211125c7d88# Parent 62dd2c7944319f3dafe06a961322a1f8660b063f Merging fix for array class constant pool reference diff -r 081f019bc04e -r cd58f129328a vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 24 00:10:23 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 24 00:12:07 2013 +0100 @@ -1416,8 +1416,12 @@ String[] classRef = { null }; String s = jc.stringValue(entryIndex, classRef); if (classRef[0] != null) { - addReference(classRef[0]); - s = accessClass(s.replace('/', '_')) + "(false).constructor.$class"; + if (classRef[0].startsWith("[")) { + s = accessClass("java_lang_Class") + "(false).forName__Ljava_lang_Class_2Ljava_lang_String_2('" + classRef[0] + "');"; + } else { + addReference(classRef[0]); + s = accessClass(s.replace('/', '_')) + "(false).constructor.$class"; + } } return s; } diff -r 081f019bc04e -r cd58f129328a vm/src/test/java/org/apidesign/vm4brwsr/Array.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Thu Jan 24 00:10:23 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Thu Jan 24 00:12:07 2013 +0100 @@ -108,6 +108,10 @@ return sum; } + public static String objectArrayClass() { + return Object[].class.getName(); + } + public static int sum(int size) { int[] arr = new int[size]; return arr[0] + arr[1]; diff -r 081f019bc04e -r cd58f129328a vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Thu Jan 24 00:10:23 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Thu Jan 24 00:12:07 2013 +0100 @@ -68,6 +68,10 @@ @Test public void doesCopyArrayWork() throws Exception { assertExec("Returns 'a'", Array.class, "copyArray__C", Double.valueOf('a')); } + + @Test public void verifyObjectArrayClass() throws Exception { + assertExec("Returns 'Object[]'", Array.class, "objectArrayClass__Ljava_lang_String_2", Array.objectArrayClass()); + } private static CharSequence codeSeq; private static Invocable code;