# HG changeset patch # User Jaroslav Tulach # Date 1358982664 -3600 # Node ID 62dd2c7944319f3dafe06a961322a1f8660b063f # Parent 38696181ea53318f867b4329bb2c02fe395c1c8e Constant pool can reference class array diff -r 38696181ea53 -r 62dd2c794431 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Jan 23 16:18:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 24 00:11:04 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 38696181ea53 -r 62dd2c794431 vm/src/test/java/org/apidesign/vm4brwsr/Array.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Wed Jan 23 16:18:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Thu Jan 24 00:11:04 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 38696181ea53 -r 62dd2c794431 vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Wed Jan 23 16:18:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Thu Jan 24 00:11:04 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;