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: