src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java
changeset 20 0e7dd9e2e31e
parent 19 2291e553464a
child 21 d8807b6a636a
     1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Thu Sep 20 14:35:21 2012 +0200
     1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Fri Sep 21 10:14:25 2012 +0200
     1.3 @@ -360,6 +360,12 @@
     1.4                  case bc_iconst_5:
     1.5                      out.append("stack.push(5);");
     1.6                      break;
     1.7 +                case bc_ldc: {
     1.8 +                    int indx = byteCodes[i++];
     1.9 +                    CPEntry entry = jc.getConstantPool().get(indx);
    1.10 +                    out.append("stack.push(" + entry.getValue() + ");");
    1.11 +                    break;
    1.12 +                }
    1.13                  case bc_ldc_w:
    1.14                  case bc_ldc2_w: {
    1.15                      int indx = readIntArg(byteCodes, i);
    1.16 @@ -368,6 +374,14 @@
    1.17                      out.append("stack.push(" + entry.getValue() + ");");
    1.18                      break;
    1.19                  }
    1.20 +                case bc_lcmp:
    1.21 +                case bc_fcmpl:
    1.22 +                case bc_fcmpg:
    1.23 +                case bc_dcmpl:
    1.24 +                case bc_dcmpg: {
    1.25 +                    out.append("{ var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); }");
    1.26 +                    break;
    1.27 +                }
    1.28                  case bc_if_icmpeq: {
    1.29                      i = generateIf(byteCodes, i, "==");
    1.30                      break;
    1.31 @@ -379,6 +393,41 @@
    1.32                      i += 2;
    1.33                      break;
    1.34                  }
    1.35 +                case bc_ifne: {
    1.36 +                    int indx = i + readIntArg(byteCodes, i);
    1.37 +                    out.append("if (stack.pop() != 0) { gt = " + indx);
    1.38 +                    out.append("; continue; }");
    1.39 +                    i += 2;
    1.40 +                    break;
    1.41 +                }
    1.42 +                case bc_iflt: {
    1.43 +                    int indx = i + readIntArg(byteCodes, i);
    1.44 +                    out.append("if (stack.pop() < 0) { gt = " + indx);
    1.45 +                    out.append("; continue; }");
    1.46 +                    i += 2;
    1.47 +                    break;
    1.48 +                }
    1.49 +                case bc_ifle: {
    1.50 +                    int indx = i + readIntArg(byteCodes, i);
    1.51 +                    out.append("if (stack.pop() <= 0) { gt = " + indx);
    1.52 +                    out.append("; continue; }");
    1.53 +                    i += 2;
    1.54 +                    break;
    1.55 +                }
    1.56 +                case bc_ifgt: {
    1.57 +                    int indx = i + readIntArg(byteCodes, i);
    1.58 +                    out.append("if (stack.pop() > 0) { gt = " + indx);
    1.59 +                    out.append("; continue; }");
    1.60 +                    i += 2;
    1.61 +                    break;
    1.62 +                }
    1.63 +                case bc_ifge: {
    1.64 +                    int indx = i + readIntArg(byteCodes, i);
    1.65 +                    out.append("if (stack.pop() >= 0) { gt = " + indx);
    1.66 +                    out.append("; continue; }");
    1.67 +                    i += 2;
    1.68 +                    break;
    1.69 +                }
    1.70                  case bc_ifnonnull: {
    1.71                      int indx = i + readIntArg(byteCodes, i);
    1.72                      out.append("if (stack.pop()) { gt = " + indx);