rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 1858 4dea14fafc31
parent 1857 f1344425bcb1
child 1862 fa00fb053c72
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Jan 25 06:40:40 2016 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Jan 25 08:14:42 2016 +0100
     1.3 @@ -41,6 +41,7 @@
     1.4      private final StringArray classRefs = new StringArray();
     1.5      private boolean outChanged;
     1.6      private boolean callbacks;
     1.7 +    private final NumberOperations numbers = new NumberOperations();
     1.8  
     1.9      protected ByteCodeToJavaScript(Appendable out) {
    1.10          this.out = out;
    1.11 @@ -293,6 +294,7 @@
    1.12              append("\n    m.access = " + m.getAccess()).append(";");
    1.13              append("\n    m.cls = CLS;");
    1.14          }
    1.15 +        append(numbers.generate());
    1.16          append("\n    c.constructor = CLS;");
    1.17          append("\n    function ").append(className).append("fillInstOf(x) {");
    1.18          String instOfName = "$instOf_" + className;
    1.19 @@ -754,7 +756,7 @@
    1.20                      smapper.replace(this, VarType.DOUBLE, "(@1 - @2)", smapper.getD(1), smapper.popD());
    1.21                      break;
    1.22                  case opc_imul:
    1.23 -                    smapper.replace(this, VarType.INTEGER, "(@1).mul32(@2)", smapper.getI(1), smapper.popI());
    1.24 +                    smapper.replace(this, VarType.INTEGER, numbers.mul32(), smapper.getI(1), smapper.popI());
    1.25                      break;
    1.26                  case opc_lmul:
    1.27                      smapper.replace(this, VarType.LONG, "(@1).mul64(@2)", smapper.getL(1), smapper.popL());
    1.28 @@ -766,7 +768,7 @@
    1.29                      smapper.replace(this, VarType.DOUBLE, "(@1 * @2)", smapper.getD(1), smapper.popD());
    1.30                      break;
    1.31                  case opc_idiv:
    1.32 -                    smapper.replace(this, VarType.INTEGER, "(@1).div32(@2)",
    1.33 +                    smapper.replace(this, VarType.INTEGER, numbers.div32(),
    1.34                           smapper.getI(1), smapper.popI());
    1.35                      break;
    1.36                  case opc_ldiv:
    1.37 @@ -780,7 +782,7 @@
    1.38                      smapper.replace(this, VarType.DOUBLE, "(@1 / @2)", smapper.getD(1), smapper.popD());
    1.39                      break;
    1.40                  case opc_irem:
    1.41 -                    smapper.replace(this, VarType.INTEGER, "(@1).mod32(@2)",
    1.42 +                    smapper.replace(this, VarType.INTEGER, numbers.mod32(),
    1.43                           smapper.getI(1), smapper.popI());
    1.44                      break;
    1.45                  case opc_lrem: