vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchjavap
changeset 170 2336c52d3ee5
parent 167 77f7135b6eb1
child 171 f61602ea7759
     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;