vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 488 9288ecf9657c
parent 474 859cc3a0b8f0
parent 481 472209ab1112
child 503 80a388c8c27b
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jan 18 15:33:03 2013 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Jan 19 06:07:49 2013 +0100
     1.3 @@ -909,7 +909,7 @@
     1.4                          case 11: jvmType = "[J"; break;
     1.5                          default: throw new IllegalStateException("Array type: " + atype);
     1.6                      }
     1.7 -                    emit(out, "var @2 = new Array(@1).initWith('@3', 0);",
     1.8 +                    emit(out, "var @2 = Array.prototype.newArray__Ljava_lang_Object_2ZLjava_lang_String_2I(true, '@3', @1);",
     1.9                           smapper.popI(), smapper.pushA(), jvmType);
    1.10                      break;
    1.11                  case opc_anewarray: {
    1.12 @@ -921,7 +921,7 @@
    1.13                      } else {
    1.14                          typeName = "[L" + typeName + ";";
    1.15                      }
    1.16 -                    emit(out, "var @2 = new Array(@1).initWith('@3', null);",
    1.17 +                    emit(out, "var @2 = Array.prototype.newArray__Ljava_lang_Object_2ZLjava_lang_String_2I(false, '@3', @1);",
    1.18                           smapper.popI(), smapper.pushA(), typeName);
    1.19                      break;
    1.20                  }
    1.21 @@ -930,27 +930,17 @@
    1.22                      i += 2;
    1.23                      String typeName = jc.getClassName(type);
    1.24                      int dim = readByte(byteCodes, ++i);
    1.25 -                    out.append("{ var a0 = new Array(").append(smapper.popI())
    1.26 -                       .append(").initWith('").append(typeName).append("', null);");
    1.27 -                    for (int d = 1; d < dim; d++) {
    1.28 -                        typeName = typeName.substring(1);
    1.29 -                        out.append("\n  var l" + d).append(" = ")
    1.30 -                           .append(smapper.popI()).append(';');
    1.31 -                        out.append("\n  for (var i" + d).append (" = 0; i" + d).
    1.32 -                            append(" < a" + (d - 1)).
    1.33 -                            append(".length; i" + d).append("++) {");
    1.34 -                        out.append("\n    var a" + d).
    1.35 -                            append (" = new Array(l" + d).append(").initWith('")
    1.36 -                            .append(typeName).append("', ")
    1.37 -                            .append(typeName.length() == 2 ? "0" : "null").append(");");
    1.38 -                        out.append("\n    a" + (d - 1)).append("[i" + d).append("] = a" + d).
    1.39 -                            append(";");
    1.40 +                    StringBuilder dims = new StringBuilder();
    1.41 +                    dims.append('[');
    1.42 +                    for (int d = 0; d < dim; d++) {
    1.43 +                        if (d != 0) {
    1.44 +                            dims.append(",");
    1.45 +                        }
    1.46 +                        dims.append(smapper.popI());
    1.47                      }
    1.48 -                    for (int d = 1; d < dim; d++) {
    1.49 -                        out.append("\n  }");
    1.50 -                    }
    1.51 -                    out.append("\nvar ").append(smapper.pushA())
    1.52 -                                        .append(" = a0; }");
    1.53 +                    dims.append(']');
    1.54 +                    emit(out, "var @2 = Array.prototype.multiNewArray__Ljava_lang_Object_2Ljava_lang_String_2_3II('@3', @1, 0);",
    1.55 +                         dims.toString(), smapper.pushA(), typeName);
    1.56                      break;
    1.57                  }
    1.58                  case opc_arraylength: