1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Oct 03 08:19:44 2012 -0700
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Oct 08 17:10:27 2012 -0700
1.3 @@ -85,7 +85,7 @@
1.4 String res = ((PrimitiveElementValue)annVal).getValue().getValue().toString();
1.5 scripts.add(res);
1.6 final AnnotationComponent process = a.getComponent("processByteCode");
1.7 - if (process != null && "false".equals(process.getValue().toString())) {
1.8 + if (process != null && "const=0".equals(process.getValue().toString())) {
1.9 return;
1.10 }
1.11 }
1.12 @@ -333,6 +333,24 @@
1.13 case bc_lxor:
1.14 out.append("stack.push(stack.pop() ^ stack.pop());");
1.15 break;
1.16 + case bc_ineg:
1.17 + case bc_lneg:
1.18 + case bc_fneg:
1.19 + case bc_dneg:
1.20 + out.append("stack.push(- stack.pop());");
1.21 + break;
1.22 + case bc_ishl:
1.23 + case bc_lshl:
1.24 + out.append("{ var v = stack.pop(); stack.push(stack.pop() << v); }");
1.25 + break;
1.26 + case bc_ishr:
1.27 + case bc_lshr:
1.28 + out.append("{ var v = stack.pop(); stack.push(stack.pop() >> v); }");
1.29 + break;
1.30 + case bc_iushr:
1.31 + case bc_lushr:
1.32 + out.append("{ var v = stack.pop(); stack.push(stack.pop() >>> v); }");
1.33 + break;
1.34 case bc_iinc: {
1.35 final int varIndx = (byteCodes[++i] + 256) % 256;
1.36 final int incrBy = (byteCodes[++i] + 256) % 256;
1.37 @@ -569,6 +587,11 @@
1.38 out.append("{ var indx = stack.pop(); stack.push(stack.pop()[indx]); }");
1.39 break;
1.40 }
1.41 + case bc_pop2:
1.42 + out.append("stack.pop();");
1.43 + case bc_pop:
1.44 + out.append("stack.pop();");
1.45 + break;
1.46 case bc_dup:
1.47 out.append("stack.push(stack[stack.length - 1]);");
1.48 break;
1.49 @@ -701,6 +724,7 @@
1.50 sig.insert(firstPos, 'A');
1.51 }
1.52 }
1.53 + array = false;
1.54 continue;
1.55 case 'V':
1.56 assert !count;
1.57 @@ -863,7 +887,9 @@
1.58
1.59 private String encodeConstant(CPEntry entry) {
1.60 final String v;
1.61 - if (entry instanceof CPStringInfo) {
1.62 + if (entry instanceof CPClassInfo) {
1.63 + v = "new java_lang_Class";
1.64 + } else if (entry instanceof CPStringInfo) {
1.65 v = "\"" + entry.getValue().toString().replace("\"", "\\\"") + "\"";
1.66 } else {
1.67 v = entry.getValue().toString();