1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 15:16:39 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sat Sep 15 22:12:49 2012 +0200
1.3 @@ -21,6 +21,10 @@
1.4 import java.io.InputStream;
1.5 import java.util.List;
1.6 import static org.netbeans.modules.classfile.ByteCodes.*;
1.7 +import org.netbeans.modules.classfile.CPClassInfo;
1.8 +import org.netbeans.modules.classfile.CPEntry;
1.9 +import org.netbeans.modules.classfile.CPFieldInfo;
1.10 +import org.netbeans.modules.classfile.CPLongInfo;
1.11 import org.netbeans.modules.classfile.CPMethodInfo;
1.12 import org.netbeans.modules.classfile.ClassFile;
1.13 import org.netbeans.modules.classfile.Code;
1.14 @@ -137,24 +141,28 @@
1.15 out.append("stack.push(arg").append(indx + ");");
1.16 break;
1.17 }
1.18 + case bc_astore_0:
1.19 case bc_istore_0:
1.20 case bc_lstore_0:
1.21 case bc_fstore_0:
1.22 case bc_dstore_0:
1.23 out.append("arg0 = stack.pop();");
1.24 break;
1.25 + case bc_astore_1:
1.26 case bc_istore_1:
1.27 case bc_lstore_1:
1.28 case bc_fstore_1:
1.29 case bc_dstore_1:
1.30 out.append("arg1 = stack.pop();");
1.31 break;
1.32 + case bc_astore_2:
1.33 case bc_istore_2:
1.34 case bc_lstore_2:
1.35 case bc_fstore_2:
1.36 case bc_dstore_2:
1.37 out.append("arg2 = stack.pop();");
1.38 break;
1.39 + case bc_astore_3:
1.40 case bc_istore_3:
1.41 case bc_lstore_3:
1.42 case bc_fstore_3:
1.43 @@ -262,6 +270,14 @@
1.44 case bc_iconst_5:
1.45 out.append("stack.push(5);");
1.46 break;
1.47 + case bc_ldc_w:
1.48 + case bc_ldc2_w: {
1.49 + int indx = readIntArg(byteCodes, i);
1.50 + CPEntry entry = jc.getConstantPool().get(indx);
1.51 + i += 2;
1.52 + out.append("stack.push(" + entry.getValue() + ");");
1.53 + break;
1.54 + }
1.55 case bc_if_icmpeq: {
1.56 i = generateIf(byteCodes, i, "==");
1.57 break;
1.58 @@ -323,6 +339,37 @@
1.59 i += 2;
1.60 break;
1.61 }
1.62 + case bc_new: {
1.63 + int indx = readIntArg(byteCodes, i);
1.64 + CPClassInfo ci = jc.getConstantPool().getClass(indx);
1.65 + out.append("stack.push(");
1.66 + out.append("new ").append(ci.getClassName().getExternalName().replace('.','_'));
1.67 + out.append("());");
1.68 + i += 2;
1.69 + break;
1.70 + }
1.71 + case bc_dup:
1.72 + out.append("stack.push(stack[stack.length - 1]);");
1.73 + break;
1.74 + case bc_bipush:
1.75 + out.append("stack.push(" + byteCodes[++i] + ");");
1.76 + break;
1.77 + case bc_invokevirtual:
1.78 + case bc_invokespecial: {
1.79 + int indx = readIntArg(byteCodes, i);
1.80 + CPMethodInfo mi = (CPMethodInfo) jc.getConstantPool().get(indx);
1.81 + out.append("{ var tmp = stack.pop(); tmp." + mi.getMethodName() + "(); }");
1.82 + i += 2;
1.83 + break;
1.84 + }
1.85 + case bc_getfield: {
1.86 + int indx = readIntArg(byteCodes, i);
1.87 + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
1.88 + out.append(" stack.push(stack.pop().").append(fi.getFieldName()).append(");");
1.89 + i += 2;
1.90 + break;
1.91 + }
1.92 +
1.93 }
1.94 out.append(" /*");
1.95 for (int j = prev; j <= i; j++) {