vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 104 1376481f15e7
parent 103 e8438996d406
child 106 346633cd13d6
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Oct 11 10:43:17 2012 -0700
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Oct 16 11:55:56 2012 +0200
     1.3 @@ -370,7 +370,7 @@
     1.4                      break;
     1.5                  case bc_iinc: {
     1.6                      final int varIndx = (byteCodes[++i] + 256) % 256;
     1.7 -                    final int incrBy = (byteCodes[++i] + 256) % 256;
     1.8 +                    final int incrBy = byteCodes[++i];
     1.9                      if (incrBy == 1) {
    1.10                          out.append("arg" + varIndx).append("++;");
    1.11                      } else {
    1.12 @@ -465,6 +465,12 @@
    1.13                      out.append("{ var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); }");
    1.14                      break;
    1.15                  }
    1.16 +                case bc_if_acmpeq:
    1.17 +                    i = generateIf(byteCodes, i, "===");
    1.18 +                    break;
    1.19 +                case bc_if_acmpne:
    1.20 +                    i = generateIf(byteCodes, i, "!=");
    1.21 +                    break;
    1.22                  case bc_if_icmpeq: {
    1.23                      i = generateIf(byteCodes, i, "==");
    1.24                      break;
    1.25 @@ -676,6 +682,13 @@
    1.26                      i += 2;
    1.27                      break;
    1.28                  }
    1.29 +                case bc_athrow: {
    1.30 +                    out.append("{ var t = stack.pop(); stack = new Array(1); stack[0] = t; throw t; }");
    1.31 +                    break;
    1.32 +                }
    1.33 +                default: {
    1.34 +                    out.append("throw 'unknown bytecode " + c + "';");
    1.35 +                }
    1.36                      
    1.37              }
    1.38              out.append(" //");