rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchReducedStack
changeset 1453 e046cfcb8f00
parent 1427 38f80da886d7
child 1455 398911a8f401
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Jan 09 21:19:44 2014 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Feb 15 14:36:43 2014 +0100
     1.3 @@ -367,72 +367,71 @@
     1.4              final int c = readUByte(byteCodes, i);
     1.5              switch (c) {
     1.6                  case opc_aload_0:
     1.7 -                    emit(out, "var @1 = @2;", smapper.pushA(), lmapper.getA(0));
     1.8 +                    smapper.assign(out, VarType.REFERENCE, lmapper.getA(0));
     1.9                      break;
    1.10                  case opc_iload_0:
    1.11 -                    emit(out, "var @1 = @2;", smapper.pushI(), lmapper.getI(0));
    1.12 +                    smapper.assign(out, VarType.INTEGER, lmapper.getI(0));
    1.13                      break;
    1.14                  case opc_lload_0:
    1.15 -                    emit(out, "var @1 = @2;", smapper.pushL(), lmapper.getL(0));
    1.16 +                    smapper.assign(out, VarType.LONG, lmapper.getL(0));
    1.17                      break;
    1.18                  case opc_fload_0:
    1.19 -                    emit(out, "var @1 = @2;", smapper.pushF(), lmapper.getF(0));
    1.20 +                    smapper.assign(out, VarType.FLOAT, lmapper.getF(0));
    1.21                      break;
    1.22                  case opc_dload_0:
    1.23 -                    emit(out, "var @1 = @2;", smapper.pushD(), lmapper.getD(0));
    1.24 +                    smapper.assign(out, VarType.DOUBLE, lmapper.getD(0));
    1.25                      break;
    1.26                  case opc_aload_1:
    1.27 -                    emit(out, "var @1 = @2;", smapper.pushA(), lmapper.getA(1));
    1.28 +                    smapper.assign(out, VarType.REFERENCE, lmapper.getA(1));
    1.29                      break;
    1.30                  case opc_iload_1:
    1.31 -                    emit(out, "var @1 = @2;", smapper.pushI(), lmapper.getI(1));
    1.32 +                    smapper.assign(out, VarType.INTEGER, lmapper.getI(1));
    1.33                      break;
    1.34                  case opc_lload_1:
    1.35 -                    emit(out, "var @1 = @2;", smapper.pushL(), lmapper.getL(1));
    1.36 +                    smapper.assign(out, VarType.LONG, lmapper.getL(1));
    1.37                      break;
    1.38                  case opc_fload_1:
    1.39 -                    emit(out, "var @1 = @2;", smapper.pushF(), lmapper.getF(1));
    1.40 +                    smapper.assign(out, VarType.FLOAT, lmapper.getF(1));
    1.41                      break;
    1.42                  case opc_dload_1:
    1.43 -                    emit(out, "var @1 = @2;", smapper.pushD(), lmapper.getD(1));
    1.44 +                    smapper.assign(out, VarType.DOUBLE, lmapper.getD(1));
    1.45                      break;
    1.46                  case opc_aload_2:
    1.47 -                    emit(out, "var @1 = @2;", smapper.pushA(), lmapper.getA(2));
    1.48 +                    smapper.assign(out, VarType.REFERENCE, lmapper.getA(2));
    1.49                      break;
    1.50                  case opc_iload_2:
    1.51 -                    emit(out, "var @1 = @2;", smapper.pushI(), lmapper.getI(2));
    1.52 +                    smapper.assign(out, VarType.INTEGER, lmapper.getI(2));
    1.53                      break;
    1.54                  case opc_lload_2:
    1.55 -                    emit(out, "var @1 = @2;", smapper.pushL(), lmapper.getL(2));
    1.56 +                    smapper.assign(out, VarType.LONG, lmapper.getL(2));
    1.57                      break;
    1.58                  case opc_fload_2:
    1.59 -                    emit(out, "var @1 = @2;", smapper.pushF(), lmapper.getF(2));
    1.60 +                    smapper.assign(out, VarType.FLOAT, lmapper.getF(2));
    1.61                      break;
    1.62                  case opc_dload_2:
    1.63 -                    emit(out, "var @1 = @2;", smapper.pushD(), lmapper.getD(2));
    1.64 +                    smapper.assign(out, VarType.DOUBLE, lmapper.getD(2));
    1.65                      break;
    1.66                  case opc_aload_3:
    1.67 -                    emit(out, "var @1 = @2;", smapper.pushA(), lmapper.getA(3));
    1.68 +                    smapper.assign(out, VarType.REFERENCE, lmapper.getA(3));
    1.69                      break;
    1.70                  case opc_iload_3:
    1.71 -                    emit(out, "var @1 = @2;", smapper.pushI(), lmapper.getI(3));
    1.72 +                    smapper.assign(out, VarType.INTEGER, lmapper.getI(3));
    1.73                      break;
    1.74                  case opc_lload_3:
    1.75 -                    emit(out, "var @1 = @2;", smapper.pushL(), lmapper.getL(3));
    1.76 +                    smapper.assign(out, VarType.LONG, lmapper.getL(3));
    1.77                      break;
    1.78                  case opc_fload_3:
    1.79 -                    emit(out, "var @1 = @2;", smapper.pushF(), lmapper.getF(3));
    1.80 +                    smapper.assign(out, VarType.FLOAT, lmapper.getF(3));
    1.81                      break;
    1.82                  case opc_dload_3:
    1.83 -                    emit(out, "var @1 = @2;", smapper.pushD(), lmapper.getD(3));
    1.84 +                    smapper.assign(out, VarType.DOUBLE, lmapper.getD(3));
    1.85                      break;
    1.86                  case opc_iload: {
    1.87                      ++i;
    1.88                      final int indx = wide ? readUShort(byteCodes, i++)
    1.89                                            : readUByte(byteCodes, i);
    1.90                      wide = false;
    1.91 -                    emit(out, "var @1 = @2;",
    1.92 -                         smapper.pushI(), lmapper.getI(indx));
    1.93 +                    smapper.assign(out, VarType.INTEGER, lmapper.getI(indx));
    1.94                      break;
    1.95                  }
    1.96                  case opc_lload: {
    1.97 @@ -440,8 +439,7 @@
    1.98                      final int indx = wide ? readUShort(byteCodes, i++)
    1.99                                            : readUByte(byteCodes, i);
   1.100                      wide = false;
   1.101 -                    emit(out, "var @1 = @2;",
   1.102 -                         smapper.pushL(), lmapper.getL(indx));
   1.103 +                    smapper.assign(out, VarType.LONG, lmapper.getL(indx));
   1.104                      break;
   1.105                  }
   1.106                  case opc_fload: {
   1.107 @@ -449,8 +447,7 @@
   1.108                      final int indx = wide ? readUShort(byteCodes, i++)
   1.109                                            : readUByte(byteCodes, i);
   1.110                      wide = false;
   1.111 -                    emit(out, "var @1 = @2;",
   1.112 -                         smapper.pushF(), lmapper.getF(indx));
   1.113 +                    smapper.assign(out, VarType.FLOAT, lmapper.getF(indx));
   1.114                      break;
   1.115                  }
   1.116                  case opc_dload: {
   1.117 @@ -458,8 +455,7 @@
   1.118                      final int indx = wide ? readUShort(byteCodes, i++)
   1.119                                            : readUByte(byteCodes, i);
   1.120                      wide = false;
   1.121 -                    emit(out, "var @1 = @2;",
   1.122 -                         smapper.pushD(), lmapper.getD(indx));
   1.123 +                    smapper.assign(out, VarType.DOUBLE, lmapper.getD(indx));
   1.124                      break;
   1.125                  }
   1.126                  case opc_aload: {
   1.127 @@ -467,8 +463,7 @@
   1.128                      final int indx = wide ? readUShort(byteCodes, i++)
   1.129                                            : readUByte(byteCodes, i);
   1.130                      wide = false;
   1.131 -                    emit(out, "var @1 = @2;",
   1.132 -                         smapper.pushA(), lmapper.getA(indx));
   1.133 +                    smapper.assign(out, VarType.REFERENCE, lmapper.getA(indx));
   1.134                      break;
   1.135                  }
   1.136                  case opc_istore: {
   1.137 @@ -1935,7 +1930,7 @@
   1.138          return ",";
   1.139      }
   1.140  
   1.141 -    private static void emit(final Appendable out,
   1.142 +    static void emit(final Appendable out,
   1.143                               final String format,
   1.144                               final CharSequence... params) throws IOException {
   1.145          final int length = format.length();