1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Sep 25 14:19:12 2012 +0200
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Sep 25 17:29:41 2012 +0200
1.3 @@ -687,7 +687,7 @@
1.4 sig.insert(firstPos, descriptor.substring(i, next).replace('/', '_'));
1.5 sig.insert(firstPos, ch);
1.6 if (array) {
1.7 - sig.append('A');
1.8 + sig.insert(firstPos, 'A');
1.9 }
1.10 hasReturnType[0] = true;
1.11 }
1.12 @@ -717,11 +717,11 @@
1.13 tmp.append("classV"); // NOI18N
1.14 } else {
1.15 tmp.append(m.getName());
1.16 - outType(findDescriptor(m.getReturnType()), tmp);
1.17 + outType(m.getReturnType(), tmp);
1.18 }
1.19 List<Parameter> args = m.getParameters();
1.20 for (Parameter t : args) {
1.21 - outType(findDescriptor(t.getDescriptor()), tmp);
1.22 + outType(t.getDescriptor(), tmp);
1.23 }
1.24 return tmp.toString();
1.25 }
1.26 @@ -814,7 +814,12 @@
1.27 }
1.28 }
1.29
1.30 - private void outType(final String d, StringBuilder out) {
1.31 + private void outType(String d, StringBuilder out) {
1.32 + int arr = 0;
1.33 + while (d.charAt(0) == '[') {
1.34 + out.append('A');
1.35 + d = d.substring(1);
1.36 + }
1.37 if (d.charAt(0) == 'L') {
1.38 assert d.charAt(d.length() - 1) == ';';
1.39 out.append(d.replace('/', '_').substring(0, d.length() - 1));
2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Tue Sep 25 14:19:12 2012 +0200
2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Tue Sep 25 17:29:41 2012 +0200
2.3 @@ -53,14 +53,21 @@
2.4
2.5 private static final Array[] ARR = { new Array(), new Array(), new Array() };
2.6
2.7 + private static Array[] arr() {
2.8 + return ARR;
2.9 + }
2.10 + private static <T> T[] filter(T[] in) {
2.11 + return in;
2.12 + }
2.13 +
2.14 public static double sum() {
2.15 double sum = 0.0;
2.16 - for (int i = 0; i < ARR.length; i++) {
2.17 - sum += ARR[i].bytes();
2.18 - sum += ARR[i].shorts();
2.19 - sum += ARR[i].ints()[2];
2.20 - sum += ARR[i].floats();
2.21 - sum += ARR[i].doubles();
2.22 + for (int i = 0; i < arr().length; i++) {
2.23 + sum += arr()[i].bytes();
2.24 + sum += arr()[i].shorts();
2.25 + sum += arr()[i].ints()[2];
2.26 + sum += arr()[i].floats();
2.27 + sum += filter(arr())[i].doubles();
2.28 }
2.29 return sum;
2.30 }