1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:17:08 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:47:44 2012 +0200
1.3 @@ -20,7 +20,7 @@
1.4 import java.io.IOException;
1.5 import java.io.InputStream;
1.6 import java.util.List;
1.7 -import org.netbeans.modules.classfile.ByteCodes;
1.8 +import static org.netbeans.modules.classfile.ByteCodes.*;
1.9 import org.netbeans.modules.classfile.ClassFile;
1.10 import org.netbeans.modules.classfile.Code;
1.11 import org.netbeans.modules.classfile.Method;
1.12 @@ -67,10 +67,16 @@
1.13 }
1.14 out.append('(');
1.15 String space = "";
1.16 - for (int i = 0; i < args.size(); i++) {
1.17 + for (int index = 0, i = 0; i < args.size(); i++) {
1.18 out.append(space);
1.19 - out.append("arg").append(String.valueOf(i));
1.20 + out.append("arg").append(String.valueOf(index));
1.21 space = ",";
1.22 + final String desc = args.get(i).getDescriptor();
1.23 + if ("D".equals(desc)) {
1.24 + index += 2;
1.25 + } else {
1.26 + index++;
1.27 + }
1.28 }
1.29 out.append(") {").append("\n var ");
1.30 final Code code = m.getCode();
1.31 @@ -94,38 +100,68 @@
1.32 out.append(" ");
1.33 final int c = (byteCodes[i] + 256) % 256;
1.34 switch (c) {
1.35 - case ByteCodes.bc_aload_0:
1.36 - case ByteCodes.bc_iload_0:
1.37 - case ByteCodes.bc_lload_0:
1.38 - case ByteCodes.bc_fload_0:
1.39 - case ByteCodes.bc_dload_0:
1.40 + case bc_aload_0:
1.41 + case bc_iload_0:
1.42 + case bc_lload_0:
1.43 + case bc_fload_0:
1.44 + case bc_dload_0:
1.45 out.append("stack.push(arg0);");
1.46 break;
1.47 - case ByteCodes.bc_aload_1:
1.48 - case ByteCodes.bc_iload_1:
1.49 - case ByteCodes.bc_lload_1:
1.50 - case ByteCodes.bc_fload_1:
1.51 - case ByteCodes.bc_dload_1:
1.52 + case bc_aload_1:
1.53 + case bc_iload_1:
1.54 + case bc_lload_1:
1.55 + case bc_fload_1:
1.56 + case bc_dload_1:
1.57 out.append("stack.push(arg1);");
1.58 break;
1.59 - case ByteCodes.bc_iadd:
1.60 - case ByteCodes.bc_ladd:
1.61 - case ByteCodes.bc_fadd:
1.62 - case ByteCodes.bc_dadd:
1.63 + case bc_aload_2:
1.64 + case bc_iload_2:
1.65 + case bc_lload_2:
1.66 + case bc_fload_2:
1.67 + case bc_dload_2:
1.68 + out.append("stack.push(arg2);");
1.69 + break;
1.70 + case bc_iadd:
1.71 + case bc_ladd:
1.72 + case bc_fadd:
1.73 + case bc_dadd:
1.74 out.append("stack.push(stack.pop() + stack.pop());");
1.75 break;
1.76 - case ByteCodes.bc_imul:
1.77 - case ByteCodes.bc_lmul:
1.78 - case ByteCodes.bc_fmul:
1.79 - case ByteCodes.bc_dmul:
1.80 + case bc_isub:
1.81 + case bc_lsub:
1.82 + case bc_fsub:
1.83 + case bc_dsub:
1.84 + out.append("stack.push(- stack.pop() + stack.pop());");
1.85 + break;
1.86 + case bc_imul:
1.87 + case bc_lmul:
1.88 + case bc_fmul:
1.89 + case bc_dmul:
1.90 out.append("stack.push(stack.pop() * stack.pop());");
1.91 break;
1.92 - case ByteCodes.bc_ireturn:
1.93 - case ByteCodes.bc_lreturn:
1.94 - case ByteCodes.bc_freturn:
1.95 - case ByteCodes.bc_dreturn:
1.96 + case bc_ireturn:
1.97 + case bc_lreturn:
1.98 + case bc_freturn:
1.99 + case bc_dreturn:
1.100 out.append("return stack.pop();");
1.101 break;
1.102 + case bc_i2l:
1.103 + case bc_i2f:
1.104 + case bc_i2d:
1.105 + case bc_l2i:
1.106 + case bc_l2f:
1.107 + case bc_l2d:
1.108 + case bc_f2i:
1.109 + case bc_f2l:
1.110 + case bc_f2d:
1.111 + case bc_d2i:
1.112 + case bc_d2l:
1.113 + case bc_d2f:
1.114 + case bc_i2b:
1.115 + case bc_i2c:
1.116 + case bc_i2s:
1.117 + out.append("/* number conversion */");
1.118 + break;
1.119 }
1.120 out.append("/*");
1.121 for (int j = prev; j <= i; j++) {