1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Nov 16 08:08:36 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Nov 17 11:21:17 2012 +0100
1.3 @@ -19,7 +19,6 @@
1.4
1.5 import java.io.IOException;
1.6 import java.io.InputStream;
1.7 -import org.apidesign.bck2brwsr.core.ExtraJavaScript;
1.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.9 import org.apidesign.javap.AnnotationParser;
1.10 import org.apidesign.javap.ClassData;
1.11 @@ -64,7 +63,10 @@
1.12 public String compile(InputStream classFile) throws IOException {
1.13 this.jc = new ClassData(classFile);
1.14 byte[] arrData = jc.findAnnotationData(true);
1.15 - String[] arr = findAnnotation(arrData, jc, ExtraJavaScript.class.getName(), "resource", "processByteCode");
1.16 + String[] arr = findAnnotation(arrData, jc,
1.17 + "org.apidesign.bck2brwsr.core.ExtraJavaScript",
1.18 + "resource", "processByteCode"
1.19 + );
1.20 if (arr != null) {
1.21 requireScript(arr[0]);
1.22 if ("0".equals(arr[1])) {
1.23 @@ -651,6 +653,12 @@
1.24 case opc_dup:
1.25 out.append("stack.push(stack[stack.length - 1]);");
1.26 break;
1.27 + case opc_dup_x1:
1.28 + out.append("{ var v1 = stack.pop(); var v2 = stack.pop(); stack.push(v1); stack.push(v2); stack.push(v1); }");
1.29 + break;
1.30 + case opc_dup_x2:
1.31 + out.append("{ var v1 = stack.pop(); var v2 = stack.pop(); var v3 = stack.pop(); stack.push(v1); stack.push(v3); stack.push(v2); stack.push(v1); }");
1.32 + break;
1.33 case opc_bipush:
1.34 out.append("stack.push(" + byteCodes[++i] + ");");
1.35 break;