diff -r 6c1fa412c72d -r dd4dabfead82 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Mar 13 11:41:04 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Sep 11 14:51:09 2015 +0200 @@ -22,6 +22,15 @@ import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.vm4brwsr.Bck2Brwsr.Flow; import static org.apidesign.vm4brwsr.ByteCodeParser.*; +import org.apidesign.vm4brwsr.ByteCodeParser.AnnotationParser; +import org.apidesign.vm4brwsr.ByteCodeParser.BootMethodData; +import org.apidesign.vm4brwsr.ByteCodeParser.CPX2; +import org.apidesign.vm4brwsr.ByteCodeParser.ClassData; +import org.apidesign.vm4brwsr.ByteCodeParser.FieldData; +import org.apidesign.vm4brwsr.ByteCodeParser.MethodData; +import org.apidesign.vm4brwsr.ByteCodeParser.StackMapIterator; +import org.apidesign.vm4brwsr.ByteCodeParser.TrapData; +import org.apidesign.vm4brwsr.ByteCodeParser.TrapDataIterator; /** Translator of the code inside class files to JavaScript. * @@ -429,10 +438,21 @@ if (defineProp) { append("Object.defineProperty(").append(destObject). - append(", '").append(name).append("', { configurable: true, writable: true, value: m = function("); + append(", '").append(name).append("', { configurable: true, writable: true, value: m = "); } else { - append("m = ").append(destObject).append(".").append(name).append(" = function("); + append("m = ").append(destObject).append(".").append(name).append(" = "); } + Flow flow = checkFlow(m); + if (flow != null) { + // OK, assume generate + if (defineProp) { + append("\n});"); + } else { + append("\n;"); + } + return defineProp; + } + append("function("); lmapper.outputArguments(this, m.isStatic()); append(") {").append("\n"); @@ -450,7 +470,6 @@ } return defineProp; } - Flow flow = checkFlow(m); final StackMapper smapper = new StackMapper(); @@ -504,16 +523,8 @@ lastStackFrame = stackMapIterator.getFrameIndex(); lmapper.syncWithFrameLocals(stackMapIterator.getFrameLocals()); smapper.syncWithFrameStack(stackMapIterator.getFrameStack()); - if (flow == null) { - append(" X_" + i).append(": for (;;) { IF: if (gt <= " + i + ") {\n"); - openBraces++; - } else { - if (!flow.isFlow(i)) { - if (i != 0) { - throw new IOException("Expecting flow suggestion at " + i); - } - } - } + append(" X_" + i).append(": for (;;) { IF: if (gt <= " + i + ") {\n"); + openBraces++; changeInCatch = true; } else { debug(" /* " + i + " */ "); @@ -522,20 +533,6 @@ append("try {"); previousTrap = trap.current(); } - if (flow != null) { - if (flow.isLoop(i)) { - append(" for (;;) {\n"); - } - if (flow.isBreak(i)) { - append("\n break;"); - } - for (int j = 0; j < flow.isEnd(i); j++) { - append("\n }"); - } - if (flow.isElse(i)) { - append(" else {\n"); - } - } final int c = readUByte(byteCodes, i); switch (c) { case opc_aload_0: @@ -2303,13 +2300,6 @@ } private static void goTo(Appendable out, Flow flow, int current, int to, int canBack) throws IOException { - if (flow != null) { - if (flow.isIf(current)) { - out.append("{"); - return; - } - throw new IllegalStateException("Opn: "); - } if (to < current) { if (canBack < to) { out.append("{ gt = 0; continue X_" + to + "; }"); @@ -2498,7 +2488,7 @@ System.err.println(msg); } - protected Flow checkFlow(MethodData byteCodes) { + protected Flow checkFlow(MethodData byteCodes) throws IOException { return null; } }