# HG changeset patch # User Jaroslav Tulach # Date 1425030746 -3600 # Node ID 3c23f0cebd32c15ed6dad7807fd31c7b28f69fe9 # Parent df885b256382bfbff2b19f07ba70751b15e9e817 Flush mapper before pushing back a result of (virtual) method invocation. The static method call was already doing that. diff -r df885b256382 -r 3c23f0cebd32 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 10:41:40 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 10:52:26 2015 +0100 @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import org.apidesign.bck2brwsr.core.JavaScriptBody; import static org.apidesign.vm4brwsr.ByteCodeParser.*; @@ -1800,6 +1799,7 @@ } if (returnType[0] != 'V') { + mapper.flush(this); append("var ") .append(mapper.pushT(VarType.fromFieldType(returnType[0]))) .append(" = "); diff -r df885b256382 -r 3c23f0cebd32 rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Fri Feb 27 10:41:40 2015 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Fri Feb 27 10:52:26 2015 +0100 @@ -219,4 +219,36 @@ public static String iterateArray(boolean javaArray) { return iterateArray(javaArray ? new String[0] : null); } + + enum ShapeType { + ZERO, ONE; + } + + private static void addType(int[][] table, ShapeType type1, ShapeType type2, int value) { + table[type1.ordinal()][type2.ordinal()] = value; + } + + public static int sumTable() { + int[][] arr = { { 99, 99 }, { 999, 999 }}; + addType(arr, ShapeType.ZERO, ShapeType.ZERO, 0); + addType(arr, ShapeType.ZERO, ShapeType.ONE, 1); + addType(arr, ShapeType.ONE, ShapeType.ZERO, 1); + addType(arr, ShapeType.ONE, ShapeType.ONE, 2); + + int sum = 0; + for (int[] row : arr) { + for (int i : row) { + sum += i; + } + } + return sum; + } + + private static int inc(int v) { + return v + 1; + } + + public static int plusOrd() { + return inc(ShapeType.ZERO.ordinal()) + inc(ShapeType.ONE.ordinal()); + } } diff -r df885b256382 -r 3c23f0cebd32 rt/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Fri Feb 27 10:41:40 2015 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Fri Feb 27 10:52:26 2015 +0100 @@ -116,6 +116,14 @@ @Test public void upCastOK2() throws Exception { assertExec("Can cast string to char sequence array", Array.class, "castArray__ZI", Double.valueOf(1), Double.valueOf(3)); } + @Test public void twoDimensionalArrayAccess() throws Exception { + int exp = Array.sumTable(); + assertExec("Is 2d access working OK?", Array.class, "sumTable__I", exp); + } + @Test public void ordAccess() throws Exception { + int exp = Array.plusOrd(); + assertExec("Is int allocated OK?", Array.class, "plusOrd__I", exp); + } private static TestVM code;