Enclose constants as objects. Get the function arguments without creates stack objects. Flush stack on frame closing. ReducedStack
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 15 Feb 2014 23:13:53 +0100
branchReducedStack
changeset 14585c8caf0ba8b8
parent 1457 b9386cc3ff7b
child 1459 6575d1848af3
Enclose constants as objects. Get the function arguments without creates stack objects. Flush stack on frame closing.
rt/emul/mini/src/main/java/java/lang/Object.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/Object.java	Sat Feb 15 20:18:26 2014 +0100
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Object.java	Sat Feb 15 23:13:53 2014 +0100
     1.3 @@ -43,7 +43,7 @@
     1.4  
     1.5      private static void registerNatives() {
     1.6          boolean assertsOn = false;
     1.7 -        assert assertsOn = false;
     1.8 + //       assert assertsOn = true;
     1.9          if (assertsOn) try {
    1.10              Array.get(null, 0);
    1.11          } catch (Throwable ex) {
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Feb 15 20:18:26 2014 +0100
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Feb 15 23:13:53 2014 +0100
     2.3 @@ -340,6 +340,7 @@
     2.4                  }
     2.5              }
     2.6              if (lastStackFrame != stackMapIterator.getFrameIndex()) {
     2.7 +                smapper.flush(out);
     2.8                  if (i != 0) {
     2.9                      out.append("    }\n");
    2.10                  }
    2.11 @@ -772,46 +773,46 @@
    2.12                      smapper.assign(out, VarType.REFERENCE, "null");
    2.13                      break;
    2.14                  case opc_iconst_m1:
    2.15 -                    smapper.assign(out, VarType.INTEGER, "-1");
    2.16 +                    smapper.assign(out, VarType.INTEGER, "(-1)");
    2.17                      break;
    2.18                  case opc_iconst_0:
    2.19 -                    smapper.assign(out, VarType.INTEGER, "0");
    2.20 +                    smapper.assign(out, VarType.INTEGER, "(0)");
    2.21                      break;
    2.22                  case opc_dconst_0:
    2.23 -                    smapper.assign(out, VarType.DOUBLE, "0");
    2.24 +                    smapper.assign(out, VarType.DOUBLE, "(0)");
    2.25                      break;
    2.26                  case opc_lconst_0:
    2.27 -                    smapper.assign(out, VarType.LONG, "0");
    2.28 +                    smapper.assign(out, VarType.LONG, "(0)");
    2.29                      break;
    2.30                  case opc_fconst_0:
    2.31 -                    smapper.assign(out, VarType.FLOAT, "0");
    2.32 +                    smapper.assign(out, VarType.FLOAT, "(0)");
    2.33                      break;
    2.34                  case opc_iconst_1:
    2.35 -                    smapper.assign(out, VarType.INTEGER, "1");
    2.36 +                    smapper.assign(out, VarType.INTEGER, "(1)");
    2.37                      break;
    2.38                  case opc_lconst_1:
    2.39 -                    smapper.assign(out, VarType.LONG, "1");
    2.40 +                    smapper.assign(out, VarType.LONG, "(1)");
    2.41                      break;
    2.42                  case opc_fconst_1:
    2.43 -                    smapper.assign(out, VarType.FLOAT, "1");
    2.44 +                    smapper.assign(out, VarType.FLOAT, "(1)");
    2.45                      break;
    2.46                  case opc_dconst_1:
    2.47 -                    smapper.assign(out, VarType.DOUBLE, "1");
    2.48 +                    smapper.assign(out, VarType.DOUBLE, "(1)");
    2.49                      break;
    2.50                  case opc_iconst_2:
    2.51 -                    smapper.assign(out, VarType.INTEGER, "2");
    2.52 +                    smapper.assign(out, VarType.INTEGER, "(2)");
    2.53                      break;
    2.54                  case opc_fconst_2:
    2.55 -                    smapper.assign(out, VarType.FLOAT, "2");
    2.56 +                    smapper.assign(out, VarType.FLOAT, "(2)");
    2.57                      break;
    2.58                  case opc_iconst_3:
    2.59 -                    smapper.assign(out, VarType.INTEGER, "3");
    2.60 +                    smapper.assign(out, VarType.INTEGER, "(3)");
    2.61                      break;
    2.62                  case opc_iconst_4:
    2.63 -                    smapper.assign(out, VarType.INTEGER, "4");
    2.64 +                    smapper.assign(out, VarType.INTEGER, "(4)");
    2.65                      break;
    2.66                  case opc_iconst_5:
    2.67 -                    smapper.assign(out, VarType.INTEGER, "5");
    2.68 +                    smapper.assign(out, VarType.INTEGER, "(5)");
    2.69                      break;
    2.70                  case opc_ldc: {
    2.71                      int indx = readUByte(byteCodes, ++i);
    2.72 @@ -1542,10 +1543,10 @@
    2.73          String mn = findMethodName(mi, cnt, returnType);
    2.74  
    2.75          final int numArguments = cnt.length() + 1;
    2.76 -        final Variable[] vars = new Variable[numArguments];
    2.77 +        final CharSequence[] vars = new CharSequence[numArguments];
    2.78  
    2.79          for (int j = numArguments - 1; j >= 0; --j) {
    2.80 -            vars[j] = mapper.pop(out);
    2.81 +            vars[j] = mapper.popValue();
    2.82          }
    2.83  
    2.84          if (returnType[0] != 'V') {