diff -r e8438996d406 -r 1376481f15e7 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Oct 11 10:43:17 2012 -0700 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Oct 16 11:55:56 2012 +0200 @@ -370,7 +370,7 @@ break; case bc_iinc: { final int varIndx = (byteCodes[++i] + 256) % 256; - final int incrBy = (byteCodes[++i] + 256) % 256; + final int incrBy = byteCodes[++i]; if (incrBy == 1) { out.append("arg" + varIndx).append("++;"); } else { @@ -465,6 +465,12 @@ out.append("{ var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); }"); break; } + case bc_if_acmpeq: + i = generateIf(byteCodes, i, "==="); + break; + case bc_if_acmpne: + i = generateIf(byteCodes, i, "!="); + break; case bc_if_icmpeq: { i = generateIf(byteCodes, i, "=="); break; @@ -676,6 +682,13 @@ i += 2; break; } + case bc_athrow: { + out.append("{ var t = stack.pop(); stack = new Array(1); stack[0] = t; throw t; }"); + break; + } + default: { + out.append("throw 'unknown bytecode " + c + "';"); + } } out.append(" //");