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);
2.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Thu Sep 20 14:35:21 2012 +0200
2.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Fri Sep 21 10:14:25 2012 +0200
2.3 @@ -176,7 +176,16 @@
2.4 }
2.5 InputStream is = StaticMethodTest.class.getClassLoader().getResourceAsStream(name + ".class");
2.6 assertNotNull(is, "Class file found");
2.7 - ByteCodeToJavaScript.compile(is, sb, toProcess);
2.8 + try {
2.9 + ByteCodeToJavaScript.compile(is, sb, toProcess);
2.10 + } catch (RuntimeException ex) {
2.11 + int lastBlock = sb.lastIndexOf("{");
2.12 + throw new IllegalStateException(
2.13 + "Error while compiling " + name + "\n" +
2.14 + sb.substring(lastBlock + 1, sb.length()),
2.15 + ex
2.16 + );
2.17 + }
2.18 }
2.19 ScriptEngineManager sem = new ScriptEngineManager();
2.20 ScriptEngine js = sem.getEngineByExtension("js");