# HG changeset patch # User Jaroslav Tulach # Date 1392647974 -3600 # Node ID f57fa856ffc44cd093f83cfdfd7b87a0f606f961 # Parent 5d6b648a39dbcfdf6489ef653e4c1a0bcf1e5be5 15KB less from 1.4MB by eliminating empty for operations diff -r 5d6b648a39db -r f57fa856ffc4 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java Mon Feb 17 14:26:55 2014 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java Mon Feb 17 15:39:34 2014 +0100 @@ -2806,6 +2806,10 @@ lastFrameByteCodeOffset = -1; advanceBy(0); } + + public boolean isEmpty() { + return stackMapTable.length == 0; + } public String getFrameAsString() { return (nextFrameIndex == 0) diff -r 5d6b648a39db -r f57fa856ffc4 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 17 14:26:55 2014 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 17 15:39:34 2014 +0100 @@ -322,11 +322,19 @@ out.append(" var ").append(" lcA0 = this;\n"); } - int lastStackFrame = -1; + int lastStackFrame; TrapData[] previousTrap = null; boolean wide = false; + boolean didBranches; + if (stackMapIterator.isEmpty()) { + didBranches = false; + lastStackFrame = 0; + } else { + didBranches = true; + lastStackFrame = -1; + out.append("\n var gt = 0;\n"); + } - out.append("\n var gt = 0;\n"); int openBraces = 0; int topMostLabel = 0; for (int i = 0; i < byteCodes.length; i++) { @@ -1313,7 +1321,9 @@ if (previousTrap != null) { generateCatch(previousTrap, byteCodes.length, topMostLabel); } - out.append("\n }\n"); + if (didBranches) { + out.append("\n }\n"); + } while (openBraces-- > 0) { out.append('}'); } diff -r 5d6b648a39db -r f57fa856ffc4 rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Mon Feb 17 14:26:55 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Mon Feb 17 15:39:34 2014 +0100 @@ -64,6 +64,7 @@ method = method.replace("constructor", "CNSTR"); assertEquals(method.indexOf("st"), -1, "There should be no stack operations:\n" + method); + assertEquals(method.indexOf("for"), -1, "There should be no for blocks:\n" + method); }