1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Feb 16 22:22:22 2014 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Feb 16 23:33:57 2014 +0100
1.3 @@ -573,10 +573,10 @@
1.4 emit(smapper, out, "var @1 = @2;", lmapper.setD(3), smapper.popD());
1.5 break;
1.6 case opc_iadd:
1.7 - smapper.replace(out, VarType.INTEGER, "@1.add32(@2)", smapper.getI(1), smapper.popI());
1.8 + smapper.replace(out, VarType.INTEGER, "(@1).add32(@2)", smapper.getI(1), smapper.popI());
1.9 break;
1.10 case opc_ladd:
1.11 - smapper.replace(out, VarType.LONG, "@1.add64(@2)", smapper.getL(1), smapper.popL());
1.12 + smapper.replace(out, VarType.LONG, "(@1).add64(@2)", smapper.getL(1), smapper.popL());
1.13 break;
1.14 case opc_fadd:
1.15 smapper.replace(out, VarType.FLOAT, "(@1 + @2)", smapper.getF(1), smapper.popF());
1.16 @@ -585,10 +585,10 @@
1.17 smapper.replace(out, VarType.DOUBLE, "(@1 + @2)", smapper.getD(1), smapper.popD());
1.18 break;
1.19 case opc_isub:
1.20 - smapper.replace(out, VarType.INTEGER, "@1.sub32(@2)", smapper.getI(1), smapper.popI());
1.21 + smapper.replace(out, VarType.INTEGER, "(@1).sub32(@2)", smapper.getI(1), smapper.popI());
1.22 break;
1.23 case opc_lsub:
1.24 - smapper.replace(out, VarType.LONG, "@1.sub64(@2)", smapper.getL(1), smapper.popL());
1.25 + smapper.replace(out, VarType.LONG, "(@1).sub64(@2)", smapper.getL(1), smapper.popL());
1.26 break;
1.27 case opc_fsub:
1.28 smapper.replace(out, VarType.FLOAT, "(@1 - @2)", smapper.getF(1), smapper.popF());
1.29 @@ -597,10 +597,10 @@
1.30 smapper.replace(out, VarType.DOUBLE, "(@1 - @2)", smapper.getD(1), smapper.popD());
1.31 break;
1.32 case opc_imul:
1.33 - smapper.replace(out, VarType.INTEGER, "@1.mul32(@2)", smapper.getI(1), smapper.popI());
1.34 + smapper.replace(out, VarType.INTEGER, "(@1).mul32(@2)", smapper.getI(1), smapper.popI());
1.35 break;
1.36 case opc_lmul:
1.37 - smapper.replace(out, VarType.LONG, "@1.mul64(@2)", smapper.getL(1), smapper.popL());
1.38 + smapper.replace(out, VarType.LONG, "(@1).mul64(@2)", smapper.getL(1), smapper.popL());
1.39 break;
1.40 case opc_fmul:
1.41 smapper.replace(out, VarType.FLOAT, "(@1 * @2)", smapper.getF(1), smapper.popF());
1.42 @@ -609,11 +609,11 @@
1.43 smapper.replace(out, VarType.DOUBLE, "(@1 * @2)", smapper.getD(1), smapper.popD());
1.44 break;
1.45 case opc_idiv:
1.46 - smapper.replace(out, VarType.INTEGER, "@1.div32(@2)",
1.47 + smapper.replace(out, VarType.INTEGER, "(@1).div32(@2)",
1.48 smapper.getI(1), smapper.popI());
1.49 break;
1.50 case opc_ldiv:
1.51 - smapper.replace(out, VarType.LONG, "@1.div64(@2)",
1.52 + smapper.replace(out, VarType.LONG, "(@1).div64(@2)",
1.53 smapper.getL(1), smapper.popL());
1.54 break;
1.55 case opc_fdiv:
1.56 @@ -623,11 +623,11 @@
1.57 smapper.replace(out, VarType.DOUBLE, "(@1 / @2)", smapper.getD(1), smapper.popD());
1.58 break;
1.59 case opc_irem:
1.60 - smapper.replace(out, VarType.INTEGER, "@1.mod32(@2)",
1.61 + smapper.replace(out, VarType.INTEGER, "(@1).mod32(@2)",
1.62 smapper.getI(1), smapper.popI());
1.63 break;
1.64 case opc_lrem:
1.65 - smapper.replace(out, VarType.LONG, "@1.mod64(@2)",
1.66 + smapper.replace(out, VarType.LONG, "(@1).mod64(@2)",
1.67 smapper.getL(1), smapper.popL());
1.68 break;
1.69 case opc_frem:
1.70 @@ -640,25 +640,25 @@
1.71 smapper.replace(out, VarType.INTEGER, "(@1 & @2)", smapper.getI(1), smapper.popI());
1.72 break;
1.73 case opc_land:
1.74 - smapper.replace(out, VarType.LONG, "@1.and64(@2)", smapper.getL(1), smapper.popL());
1.75 + smapper.replace(out, VarType.LONG, "(@1).and64(@2)", smapper.getL(1), smapper.popL());
1.76 break;
1.77 case opc_ior:
1.78 smapper.replace(out, VarType.INTEGER, "(@1 | @2)", smapper.getI(1), smapper.popI());
1.79 break;
1.80 case opc_lor:
1.81 - smapper.replace(out, VarType.LONG, "@1.or64(@2)", smapper.getL(1), smapper.popL());
1.82 + smapper.replace(out, VarType.LONG, "(@1).or64(@2)", smapper.getL(1), smapper.popL());
1.83 break;
1.84 case opc_ixor:
1.85 smapper.replace(out, VarType.INTEGER, "(@1 ^ @2)", smapper.getI(1), smapper.popI());
1.86 break;
1.87 case opc_lxor:
1.88 - smapper.replace(out, VarType.LONG, "@1.xor64(@2)", smapper.getL(1), smapper.popL());
1.89 + smapper.replace(out, VarType.LONG, "(@1).xor64(@2)", smapper.getL(1), smapper.popL());
1.90 break;
1.91 case opc_ineg:
1.92 - smapper.replace(out, VarType.INTEGER, "@1.neg32()", smapper.getI(0));
1.93 + smapper.replace(out, VarType.INTEGER, "(@1).neg32()", smapper.getI(0));
1.94 break;
1.95 case opc_lneg:
1.96 - smapper.replace(out, VarType.LONG, "@1.neg64()", smapper.getL(0));
1.97 + smapper.replace(out, VarType.LONG, "(@1).neg64()", smapper.getL(0));
1.98 break;
1.99 case opc_fneg:
1.100 smapper.replace(out, VarType.FLOAT, "(-@1)", smapper.getF(0));
1.101 @@ -670,19 +670,19 @@
1.102 smapper.replace(out, VarType.INTEGER, "(@1 << @2)", smapper.getI(1), smapper.popI());
1.103 break;
1.104 case opc_lshl:
1.105 - smapper.replace(out, VarType.LONG, "@1.shl64(@2)", smapper.getL(1), smapper.popI());
1.106 + smapper.replace(out, VarType.LONG, "(@1).shl64(@2)", smapper.getL(1), smapper.popI());
1.107 break;
1.108 case opc_ishr:
1.109 smapper.replace(out, VarType.INTEGER, "(@1 >> @2)", smapper.getI(1), smapper.popI());
1.110 break;
1.111 case opc_lshr:
1.112 - smapper.replace(out, VarType.LONG, "@1.shr64(@2)", smapper.getL(1), smapper.popI());
1.113 + smapper.replace(out, VarType.LONG, "(@1).shr64(@2)", smapper.getL(1), smapper.popI());
1.114 break;
1.115 case opc_iushr:
1.116 smapper.replace(out, VarType.INTEGER, "(@1 >>> @2)", smapper.getI(1), smapper.popI());
1.117 break;
1.118 case opc_lushr:
1.119 - smapper.replace(out, VarType.LONG, "@1.ushr64(@2)", smapper.getL(1), smapper.popI());
1.120 + smapper.replace(out, VarType.LONG, "(@1).ushr64(@2)", smapper.getL(1), smapper.popI());
1.121 break;
1.122 case opc_iinc: {
1.123 ++i;
1.124 @@ -729,14 +729,14 @@
1.125 smapper.replace(out, VarType.DOUBLE, "@1", smapper.getI(0));
1.126 break;
1.127 case opc_l2i:
1.128 - smapper.replace(out, VarType.INTEGER, "@1.toInt32()", smapper.getL(0));
1.129 + smapper.replace(out, VarType.INTEGER, "(@1).toInt32()", smapper.getL(0));
1.130 break;
1.131 // max int check?
1.132 case opc_l2f:
1.133 - smapper.replace(out, VarType.FLOAT, "@1.toFP()", smapper.getL(0));
1.134 + smapper.replace(out, VarType.FLOAT, "(@1).toFP()", smapper.getL(0));
1.135 break;
1.136 case opc_l2d:
1.137 - smapper.replace(out, VarType.DOUBLE, "@1.toFP()", smapper.getL(0));
1.138 + smapper.replace(out, VarType.DOUBLE, "(@1).toFP()", smapper.getL(0));
1.139 break;
1.140 case opc_f2d:
1.141 smapper.replace(out, VarType.DOUBLE, "@1",
1.142 @@ -747,72 +747,72 @@
1.143 smapper.getD(0));
1.144 break;
1.145 case opc_f2i:
1.146 - smapper.replace(out, VarType.INTEGER, "@1.toInt32()",
1.147 + smapper.replace(out, VarType.INTEGER, "(@1).toInt32()",
1.148 smapper.getF(0));
1.149 break;
1.150 case opc_f2l:
1.151 - smapper.replace(out, VarType.LONG, "@1.toLong()",
1.152 + smapper.replace(out, VarType.LONG, "(@1).toLong()",
1.153 smapper.getF(0));
1.154 break;
1.155 case opc_d2i:
1.156 - smapper.replace(out, VarType.INTEGER, "@1.toInt32()",
1.157 + smapper.replace(out, VarType.INTEGER, "(@1).toInt32()",
1.158 smapper.getD(0));
1.159 break;
1.160 case opc_d2l:
1.161 - smapper.replace(out, VarType.LONG, "@1.toLong()", smapper.getD(0));
1.162 + smapper.replace(out, VarType.LONG, "(@1).toLong()", smapper.getD(0));
1.163 break;
1.164 case opc_i2b:
1.165 - smapper.replace(out, VarType.INTEGER, "@1.toInt8()", smapper.getI(0));
1.166 + smapper.replace(out, VarType.INTEGER, "(@1).toInt8()", smapper.getI(0));
1.167 break;
1.168 case opc_i2c:
1.169 break;
1.170 case opc_i2s:
1.171 - smapper.replace(out, VarType.INTEGER, "@1.toInt16()", smapper.getI(0));
1.172 + smapper.replace(out, VarType.INTEGER, "(@1).toInt16()", smapper.getI(0));
1.173 break;
1.174 case opc_aconst_null:
1.175 smapper.assign(out, VarType.REFERENCE, "null");
1.176 break;
1.177 case opc_iconst_m1:
1.178 - smapper.assign(out, VarType.INTEGER, "(-1)");
1.179 + smapper.assign(out, VarType.INTEGER, "-1");
1.180 break;
1.181 case opc_iconst_0:
1.182 - smapper.assign(out, VarType.INTEGER, "(0)");
1.183 + smapper.assign(out, VarType.INTEGER, "0");
1.184 break;
1.185 case opc_dconst_0:
1.186 - smapper.assign(out, VarType.DOUBLE, "(0)");
1.187 + smapper.assign(out, VarType.DOUBLE, "0");
1.188 break;
1.189 case opc_lconst_0:
1.190 - smapper.assign(out, VarType.LONG, "(0)");
1.191 + smapper.assign(out, VarType.LONG, "0");
1.192 break;
1.193 case opc_fconst_0:
1.194 - smapper.assign(out, VarType.FLOAT, "(0)");
1.195 + smapper.assign(out, VarType.FLOAT, "0");
1.196 break;
1.197 case opc_iconst_1:
1.198 - smapper.assign(out, VarType.INTEGER, "(1)");
1.199 + smapper.assign(out, VarType.INTEGER, "1");
1.200 break;
1.201 case opc_lconst_1:
1.202 - smapper.assign(out, VarType.LONG, "(1)");
1.203 + smapper.assign(out, VarType.LONG, "1");
1.204 break;
1.205 case opc_fconst_1:
1.206 - smapper.assign(out, VarType.FLOAT, "(1)");
1.207 + smapper.assign(out, VarType.FLOAT, "1");
1.208 break;
1.209 case opc_dconst_1:
1.210 - smapper.assign(out, VarType.DOUBLE, "(1)");
1.211 + smapper.assign(out, VarType.DOUBLE, "1");
1.212 break;
1.213 case opc_iconst_2:
1.214 - smapper.assign(out, VarType.INTEGER, "(2)");
1.215 + smapper.assign(out, VarType.INTEGER, "2");
1.216 break;
1.217 case opc_fconst_2:
1.218 - smapper.assign(out, VarType.FLOAT, "(2)");
1.219 + smapper.assign(out, VarType.FLOAT, "2");
1.220 break;
1.221 case opc_iconst_3:
1.222 - smapper.assign(out, VarType.INTEGER, "(3)");
1.223 + smapper.assign(out, VarType.INTEGER, "3");
1.224 break;
1.225 case opc_iconst_4:
1.226 - smapper.assign(out, VarType.INTEGER, "(4)");
1.227 + smapper.assign(out, VarType.INTEGER, "4");
1.228 break;
1.229 case opc_iconst_5:
1.230 - smapper.assign(out, VarType.INTEGER, "(5)");
1.231 + smapper.assign(out, VarType.INTEGER, "5");
1.232 break;
1.233 case opc_ldc: {
1.234 int indx = readUByte(byteCodes, ++i);
1.235 @@ -832,7 +832,7 @@
1.236 final int low = (int)(lv.longValue() & 0xFFFFFFFF);
1.237 final int hi = (int)(lv.longValue() >> 32);
1.238 if (hi == 0) {
1.239 - smapper.assign(out, VarType.LONG, "(0x" + Integer.toHexString(low) + ")");
1.240 + smapper.assign(out, VarType.LONG, "0x" + Integer.toHexString(low));
1.241 } else {
1.242 smapper.assign(out, VarType.LONG,
1.243 "0x" + Integer.toHexString(hi) + ".next32(0x" +
1.244 @@ -845,7 +845,7 @@
1.245 break;
1.246 }
1.247 case opc_lcmp:
1.248 - emit(smapper, out, "var @3 = @2.compare64(@1);",
1.249 + emit(smapper, out, "var @3 = (@2).compare64(@1);",
1.250 smapper.popL(), smapper.popL(), smapper.pushI());
1.251 break;
1.252 case opc_fcmpl: