Flush mapper before pushing back a result of (virtual) method invocation. The static method call was already doing that.
1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 10:41:40 2015 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 10:52:26 2015 +0100
1.3 @@ -19,7 +19,6 @@
1.4
1.5 import java.io.IOException;
1.6 import java.io.InputStream;
1.7 -import java.util.Arrays;
1.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.9 import static org.apidesign.vm4brwsr.ByteCodeParser.*;
1.10
1.11 @@ -1800,6 +1799,7 @@
1.12 }
1.13
1.14 if (returnType[0] != 'V') {
1.15 + mapper.flush(this);
1.16 append("var ")
1.17 .append(mapper.pushT(VarType.fromFieldType(returnType[0])))
1.18 .append(" = ");
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Fri Feb 27 10:41:40 2015 +0100
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Fri Feb 27 10:52:26 2015 +0100
2.3 @@ -219,4 +219,36 @@
2.4 public static String iterateArray(boolean javaArray) {
2.5 return iterateArray(javaArray ? new String[0] : null);
2.6 }
2.7 +
2.8 + enum ShapeType {
2.9 + ZERO, ONE;
2.10 + }
2.11 +
2.12 + private static void addType(int[][] table, ShapeType type1, ShapeType type2, int value) {
2.13 + table[type1.ordinal()][type2.ordinal()] = value;
2.14 + }
2.15 +
2.16 + public static int sumTable() {
2.17 + int[][] arr = { { 99, 99 }, { 999, 999 }};
2.18 + addType(arr, ShapeType.ZERO, ShapeType.ZERO, 0);
2.19 + addType(arr, ShapeType.ZERO, ShapeType.ONE, 1);
2.20 + addType(arr, ShapeType.ONE, ShapeType.ZERO, 1);
2.21 + addType(arr, ShapeType.ONE, ShapeType.ONE, 2);
2.22 +
2.23 + int sum = 0;
2.24 + for (int[] row : arr) {
2.25 + for (int i : row) {
2.26 + sum += i;
2.27 + }
2.28 + }
2.29 + return sum;
2.30 + }
2.31 +
2.32 + private static int inc(int v) {
2.33 + return v + 1;
2.34 + }
2.35 +
2.36 + public static int plusOrd() {
2.37 + return inc(ShapeType.ZERO.ordinal()) + inc(ShapeType.ONE.ordinal());
2.38 + }
2.39 }
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Fri Feb 27 10:41:40 2015 +0100
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Fri Feb 27 10:52:26 2015 +0100
3.3 @@ -116,6 +116,14 @@
3.4 @Test public void upCastOK2() throws Exception {
3.5 assertExec("Can cast string to char sequence array", Array.class, "castArray__ZI", Double.valueOf(1), Double.valueOf(3));
3.6 }
3.7 + @Test public void twoDimensionalArrayAccess() throws Exception {
3.8 + int exp = Array.sumTable();
3.9 + assertExec("Is 2d access working OK?", Array.class, "sumTable__I", exp);
3.10 + }
3.11 + @Test public void ordAccess() throws Exception {
3.12 + int exp = Array.plusOrd();
3.13 + assertExec("Is int allocated OK?", Array.class, "plusOrd__I", exp);
3.14 + }
3.15
3.16 private static TestVM code;
3.17