vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchemul
changeset 93 a236a9f137ac
parent 92 bf4f95784c62
child 94 19497b4312bb
     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();