# HG changeset patch # User Jaroslav Tulach # Date 1392635311 -3600 # Node ID 5538c1eb03be6116a90504db421dfccec481b5e3 # Parent 39d26d3686d95efbe9d130b94328cd8e048296dc Correctly encode the index of the type using bit shift diff -r 39d26d3686d9 -r 5538c1eb03be rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java Mon Feb 17 07:54:35 2014 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java Mon Feb 17 12:08:31 2014 +0100 @@ -78,7 +78,8 @@ String[] values = stackValues.toArray(); final int last = stackTypeIndexPairs.getSize() - 1; values[last] = sb.toString(); - stackTypeIndexPairs.set(last, varType); + final int value = (last << 8) | (varType & 0xff); + stackTypeIndexPairs.set(last, value); } void flush(Appendable out) throws IOException { diff -r 39d26d3686d9 -r 5538c1eb03be rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Mon Feb 17 07:54:35 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Mon Feb 17 12:08:31 2014 +0100 @@ -137,4 +137,8 @@ @JavaScriptBody(args = { "instance" }, body = "return instance.getByte__B();") private static native int jsgetbytes(Instance instance); + + int sum(int i, int i0) { + return i + i0; + } } diff -r 39d26d3686d9 -r 5538c1eb03be rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Mon Feb 17 07:54:35 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Mon Feb 17 12:08:31 2014 +0100 @@ -132,6 +132,11 @@ return ((String)o).length(); } + public static int initInflater(int w, boolean nowrap) { + Instance i = new Instance(w, 0.0); + return i.sum(nowrap?-w:w, 1); + } + static { // check order of initializers StaticUse.NON_NULL.equals(new Object()); diff -r 39d26d3686d9 -r 5538c1eb03be rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Feb 17 07:54:35 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Feb 17 12:08:31 2014 +0100 @@ -170,6 +170,25 @@ 3, 3.75 ); } + + @Test public void inflaterInit() throws Exception { + assertExec( + "Down and minus", + StaticMethod.class, "initInflater__IIZ", + Double.valueOf(-9), + 10, true + ); + } + + @Test public void inflaterInitNoNeg() throws Exception { + assertExec( + "One up", + StaticMethod.class, "initInflater__IIZ", + Double.valueOf(11), + 10, false + ); + } + @Test public void mixedMethodFourParams() throws Exception { assertExec( "Should be two",