15KB less from 1.4MB by eliminating empty for operations ReducedStack
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 17 Feb 2014 15:39:34 +0100
branchReducedStack
changeset 1469f57fa856ffc4
parent 1468 5d6b648a39db
child 1470 6ab756741111
15KB less from 1.4MB by eliminating empty for operations
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java	Mon Feb 17 14:26:55 2014 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java	Mon Feb 17 15:39:34 2014 +0100
     1.3 @@ -2806,6 +2806,10 @@
     1.4              lastFrameByteCodeOffset = -1;
     1.5              advanceBy(0);
     1.6          }
     1.7 +        
     1.8 +        public boolean isEmpty() {
     1.9 +            return stackMapTable.length == 0;
    1.10 +        }
    1.11  
    1.12          public String getFrameAsString() {
    1.13              return (nextFrameIndex == 0)
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 17 14:26:55 2014 +0100
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 17 15:39:34 2014 +0100
     2.3 @@ -322,11 +322,19 @@
     2.4              out.append("  var ").append(" lcA0 = this;\n");
     2.5          }
     2.6  
     2.7 -        int lastStackFrame = -1;
     2.8 +        int lastStackFrame;
     2.9          TrapData[] previousTrap = null;
    2.10          boolean wide = false;
    2.11 +        boolean didBranches;
    2.12 +        if (stackMapIterator.isEmpty()) {
    2.13 +            didBranches = false;
    2.14 +            lastStackFrame = 0;
    2.15 +        } else {
    2.16 +            didBranches = true;
    2.17 +            lastStackFrame = -1;
    2.18 +            out.append("\n  var gt = 0;\n");
    2.19 +        }
    2.20          
    2.21 -        out.append("\n  var gt = 0;\n");
    2.22          int openBraces = 0;
    2.23          int topMostLabel = 0;
    2.24          for (int i = 0; i < byteCodes.length; i++) {
    2.25 @@ -1313,7 +1321,9 @@
    2.26          if (previousTrap != null) {
    2.27              generateCatch(previousTrap, byteCodes.length, topMostLabel);
    2.28          }
    2.29 -        out.append("\n    }\n");
    2.30 +        if (didBranches) {
    2.31 +            out.append("\n    }\n");
    2.32 +        }
    2.33          while (openBraces-- > 0) {
    2.34              out.append('}');
    2.35          }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java	Mon Feb 17 14:26:55 2014 +0100
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java	Mon Feb 17 15:39:34 2014 +0100
     3.3 @@ -64,6 +64,7 @@
     3.4          method = method.replace("constructor", "CNSTR");
     3.5          
     3.6          assertEquals(method.indexOf("st"), -1, "There should be no stack operations:\n" + method);
     3.7 +        assertEquals(method.indexOf("for"), -1, "There should be no for blocks:\n" + method);
     3.8      }
     3.9      
    3.10