1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 17 12:08:31 2014 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 17 14:26:55 2014 +0100
1.3 @@ -859,15 +859,15 @@
1.4 smapper.popD(), smapper.popD(), smapper.pushI());
1.5 break;
1.6 case opc_if_acmpeq:
1.7 - i = generateIf(byteCodes, i, smapper.popA(), smapper.popA(),
1.8 + i = generateIf(smapper, byteCodes, i, smapper.popA(), smapper.popA(),
1.9 "===", topMostLabel);
1.10 break;
1.11 case opc_if_acmpne:
1.12 - i = generateIf(byteCodes, i, smapper.popA(), smapper.popA(),
1.13 + i = generateIf(smapper, byteCodes, i, smapper.popA(), smapper.popA(),
1.14 "!==", topMostLabel);
1.15 break;
1.16 case opc_if_icmpeq:
1.17 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.18 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.19 "==", topMostLabel);
1.20 break;
1.21 case opc_ifeq: {
1.22 @@ -927,23 +927,23 @@
1.23 break;
1.24 }
1.25 case opc_if_icmpne:
1.26 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.27 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.28 "!=", topMostLabel);
1.29 break;
1.30 case opc_if_icmplt:
1.31 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.32 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.33 "<", topMostLabel);
1.34 break;
1.35 case opc_if_icmple:
1.36 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.37 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.38 "<=", topMostLabel);
1.39 break;
1.40 case opc_if_icmpgt:
1.41 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.42 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.43 ">", topMostLabel);
1.44 break;
1.45 case opc_if_icmpge:
1.46 - i = generateIf(byteCodes, i, smapper.popI(), smapper.popI(),
1.47 + i = generateIf(smapper, byteCodes, i, smapper.popI(), smapper.popI(),
1.48 ">=", topMostLabel);
1.49 break;
1.50 case opc_goto: {
1.51 @@ -1320,7 +1320,11 @@
1.52 out.append("\n};");
1.53 }
1.54
1.55 - private int generateIf(byte[] byteCodes, int i, final CharSequence v2, final CharSequence v1, final String test, int topMostLabel) throws IOException {
1.56 + private int generateIf(StackMapper mapper, byte[] byteCodes,
1.57 + int i, final CharSequence v2, final CharSequence v1,
1.58 + final String test, int topMostLabel
1.59 + ) throws IOException {
1.60 + mapper.flush(out);
1.61 int indx = i + readShortArg(byteCodes, i);
1.62 out.append("if (").append(v1)
1.63 .append(' ').append(test).append(' ')
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Mon Feb 17 12:08:31 2014 +0100
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Mon Feb 17 14:26:55 2014 +0100
2.3 @@ -137,6 +137,53 @@
2.4 return i.sum(nowrap?-w:w, 1);
2.5 }
2.6
2.7 + public static String toStringArr() {
2.8 + class N implements Next {
2.9 + int idx = 0;
2.10 +
2.11 + @Override
2.12 + public boolean hasNext() {
2.13 + return idx < 5;
2.14 + }
2.15 +
2.16 + @Override
2.17 + public String next() {
2.18 + switch (idx++) {
2.19 + case 0: return "Zero";
2.20 + case 1: return "One";
2.21 + case 2: return "Two";
2.22 + case 3: return "Three";
2.23 + case 4: return "Four";
2.24 + }
2.25 + throw new IllegalStateException();
2.26 + }
2.27 + }
2.28 + return toString(null, new N()).toString();
2.29 + }
2.30 +
2.31 + static String toString(Object thiz, Next it) {
2.32 + if (!it.hasNext()) {
2.33 + return "[]";
2.34 + }
2.35 +
2.36 + StringBuilder sb = new StringBuilder();
2.37 + sb.append('[');
2.38 + for (;;) {
2.39 + String e = it.next();
2.40 + sb.append(e == thiz ? "(this Collection)" : e);
2.41 + if (!it.hasNext()) {
2.42 + return sb.append(']').toString();
2.43 + }
2.44 + sb.append(',').append(' ');
2.45 + }
2.46 + }
2.47 +
2.48 + static interface Next {
2.49 + boolean hasNext();
2.50 + String next();
2.51 + }
2.52 +
2.53 +
2.54 static {
2.55 // check order of initializers
2.56 StaticUse.NON_NULL.equals(new Object());
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Feb 17 12:08:31 2014 +0100
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Feb 17 14:26:55 2014 +0100
3.3 @@ -224,6 +224,15 @@
3.4 );
3.5 }
3.6
3.7 + @Test public void collectionToString() throws Exception {
3.8 + String exp = StaticMethod.toStringArr();
3.9 + assertExec(
3.10 + "0 to 4",
3.11 + StaticMethod.class, "toStringArr__Ljava_lang_String_2",
3.12 + exp
3.13 + );
3.14 + }
3.15 +
3.16 @Test public void or() throws Exception {
3.17 assertExec(
3.18 "Or will be 7",