Correctly encode the index of the type using bit shift ReducedStack
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 17 Feb 2014 12:08:31 +0100
branchReducedStack
changeset 14675538c1eb03be
parent 1466 39d26d3686d9
child 1468 5d6b648a39db
Correctly encode the index of the type using bit shift
rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java	Mon Feb 17 07:54:35 2014 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/StackMapper.java	Mon Feb 17 12:08:31 2014 +0100
     1.3 @@ -78,7 +78,8 @@
     1.4          String[] values = stackValues.toArray();
     1.5          final int last = stackTypeIndexPairs.getSize() - 1;
     1.6          values[last] = sb.toString();
     1.7 -        stackTypeIndexPairs.set(last, varType);
     1.8 +        final int value = (last << 8) | (varType & 0xff);
     1.9 +        stackTypeIndexPairs.set(last, value);
    1.10      }
    1.11      
    1.12      void flush(Appendable out) throws IOException {
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Mon Feb 17 07:54:35 2014 +0100
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Mon Feb 17 12:08:31 2014 +0100
     2.3 @@ -137,4 +137,8 @@
     2.4      
     2.5      @JavaScriptBody(args = { "instance" }, body = "return instance.getByte__B();")
     2.6      private static native int jsgetbytes(Instance instance);
     2.7 +
     2.8 +    int sum(int i, int i0) {
     2.9 +        return i + i0;
    2.10 +    }
    2.11  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Mon Feb 17 07:54:35 2014 +0100
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Mon Feb 17 12:08:31 2014 +0100
     3.3 @@ -132,6 +132,11 @@
     3.4          return ((String)o).length();
     3.5      }
     3.6      
     3.7 +    public static int initInflater(int w, boolean nowrap) {
     3.8 +        Instance i = new Instance(w, 0.0);
     3.9 +        return i.sum(nowrap?-w:w, 1);
    3.10 +    }
    3.11 +    
    3.12      static {
    3.13          // check order of initializers
    3.14          StaticUse.NON_NULL.equals(new Object());
     4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Mon Feb 17 07:54:35 2014 +0100
     4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Mon Feb 17 12:08:31 2014 +0100
     4.3 @@ -170,6 +170,25 @@
     4.4              3, 3.75
     4.5          );
     4.6      }
     4.7 +  
     4.8 +    @Test public void inflaterInit() throws Exception {
     4.9 +        assertExec(
    4.10 +            "Down and minus",
    4.11 +            StaticMethod.class, "initInflater__IIZ",
    4.12 +            Double.valueOf(-9),
    4.13 +            10, true
    4.14 +        );
    4.15 +    }
    4.16 +
    4.17 +    @Test public void inflaterInitNoNeg() throws Exception {
    4.18 +        assertExec(
    4.19 +            "One up",
    4.20 +            StaticMethod.class, "initInflater__IIZ",
    4.21 +            Double.valueOf(11),
    4.22 +            10, false
    4.23 +        );
    4.24 +    }
    4.25 +    
    4.26      @Test public void mixedMethodFourParams() throws Exception {
    4.27          assertExec(
    4.28              "Should be two",