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;