src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java
changeset 3 e44f0155d946
parent 2 4679bf342a1f
child 4 f352a33fb71b
     1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Mon Aug 27 05:47:44 2012 +0200
     1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Mon Aug 27 06:12:35 2012 +0200
     1.3 @@ -72,7 +72,7 @@
     1.4              out.append("arg").append(String.valueOf(index));
     1.5              space = ",";
     1.6              final String desc = args.get(i).getDescriptor();
     1.7 -            if ("D".equals(desc)) {
     1.8 +            if ("D".equals(desc) || "J".equals(desc)) {
     1.9                  index += 2;
    1.10              } else {
    1.11                  index++;
    1.12 @@ -121,6 +121,22 @@
    1.13                  case bc_dload_2:
    1.14                      out.append("stack.push(arg2);");
    1.15                      break;
    1.16 +                case bc_aload_3:
    1.17 +                case bc_iload_3:
    1.18 +                case bc_lload_3:
    1.19 +                case bc_fload_3:
    1.20 +                case bc_dload_3:
    1.21 +                    out.append("stack.push(arg3);");
    1.22 +                    break;
    1.23 +                case bc_iload:
    1.24 +                case bc_lload:
    1.25 +                case bc_fload:
    1.26 +                case bc_dload:
    1.27 +                case bc_aload: {
    1.28 +                    final int indx = (byteCodes[++i] + 256) % 256;
    1.29 +                    out.append("stack.push(arg").append(indx + ");");
    1.30 +                    break;
    1.31 +                }
    1.32                  case bc_iadd:
    1.33                  case bc_ladd:
    1.34                  case bc_fadd:
    1.35 @@ -131,7 +147,7 @@
    1.36                  case bc_lsub:
    1.37                  case bc_fsub:
    1.38                  case bc_dsub:
    1.39 -                    out.append("stack.push(- stack.pop() + stack.pop());");
    1.40 +                    out.append("{ var tmp = stack.pop(); stack.push(stack.pop() - tmp); }");
    1.41                      break;
    1.42                  case bc_imul:
    1.43                  case bc_lmul:
    1.44 @@ -139,6 +155,14 @@
    1.45                  case bc_dmul:
    1.46                      out.append("stack.push(stack.pop() * stack.pop());");
    1.47                      break;
    1.48 +                case bc_idiv:
    1.49 +                case bc_ldiv:
    1.50 +                    out.append("{ var tmp = stack.pop(); stack.push(Math.floor(stack.pop() / tmp)); }");
    1.51 +                    break;
    1.52 +                case bc_fdiv:
    1.53 +                case bc_ddiv:
    1.54 +                    out.append("{ var tmp = stack.pop(); stack.push(stack.pop() / tmp); }");
    1.55 +                    break;
    1.56                  case bc_ireturn:
    1.57                  case bc_lreturn:
    1.58                  case bc_freturn:
    1.59 @@ -149,21 +173,26 @@
    1.60                  case bc_i2f:
    1.61                  case bc_i2d:
    1.62                  case bc_l2i:
    1.63 +                    // max int check?
    1.64                  case bc_l2f:
    1.65                  case bc_l2d:
    1.66 +                case bc_f2d:
    1.67 +                case bc_d2f:
    1.68 +                    out.append("/* number conversion */");
    1.69 +                    break;
    1.70                  case bc_f2i:
    1.71                  case bc_f2l:
    1.72 -                case bc_f2d:
    1.73                  case bc_d2i:
    1.74                  case bc_d2l:
    1.75 -                case bc_d2f:
    1.76 +                    out.append("stack.push(Math.floor(stack.pop()));");
    1.77 +                    break;
    1.78                  case bc_i2b:
    1.79                  case bc_i2c:
    1.80                  case bc_i2s:
    1.81                      out.append("/* number conversion */");
    1.82                      break;
    1.83              }
    1.84 -            out.append("/*");
    1.85 +            out.append(" /*");
    1.86              for (int j = prev; j <= i; j++) {
    1.87                  out.append(" ");
    1.88                  final int cc = (byteCodes[j] + 256) % 256;