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: