Use normal constants and only wrap them before calling an operation on them ReducedStack
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 16 Feb 2014 23:33:57 +0100
branchReducedStack
changeset 146315c1110da559
parent 1462 1e7ff3ba3666
child 1464 851742770741
Use normal constants and only wrap them before calling an operation on them
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     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: