vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchArrayReflect
changeset 481 472209ab1112
parent 479 34931e381886
child 488 9288ecf9657c
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jan 18 17:04:16 2013 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jan 18 18:52:02 2013 +0100
     1.3 @@ -947,26 +947,17 @@
     1.4                      i += 2;
     1.5                      String typeName = jc.getClassName(type);
     1.6                      int dim = readByte(byteCodes, ++i);
     1.7 -                    out.append("{ var a0 = new Array(").append(smapper.popI())
     1.8 -                       .append(").initWith('").append(typeName).append("', null);");
     1.9 -                    for (int d = 1; d < dim; d++) {
    1.10 -                        typeName = typeName.substring(1);
    1.11 -                        out.append("\n  var l" + d).append(" = ")
    1.12 -                           .append(smapper.popI()).append(';');
    1.13 -                        out.append("\n  for (var i" + d).append (" = 0; i" + d).
    1.14 -                            append(" < a" + (d - 1)).
    1.15 -                            append(".length; i" + d).append("++) {");
    1.16 -                        out.append("\n    var a" + d).
    1.17 -                            append (" = new Array(l" + d).append(").initWith('")
    1.18 -                            .append(typeName).append("', ")
    1.19 -                            .append(typeName.length() == 2 ? "0" : "null").append(");");
    1.20 -                        out.append("\n    a" + (d - 1)).append("[i" + d).append("] = a" + d).
    1.21 -                            append(";");
    1.22 +                    StringBuilder dims = new StringBuilder();
    1.23 +                    dims.append('[');
    1.24 +                    for (int d = 0; d < dim; d++) {
    1.25 +                        if (d != 0) {
    1.26 +                            dims.append(",");
    1.27 +                        }
    1.28 +                        dims.append(smapper.popI());
    1.29                      }
    1.30 -                    for (int d = 1; d < dim; d++) {
    1.31 -                        out.append("\n  }");
    1.32 -                    }
    1.33 -                    out.append("\n").append(smapper.pushA()).append(" = a0; }");
    1.34 +                    dims.append(']');
    1.35 +                    emit(out, "@2 = Array.prototype.multiNewArray__Ljava_lang_Object_2Ljava_lang_String_2_3II('@3', @1, 0);",
    1.36 +                         dims.toString(), smapper.pushA(), typeName);
    1.37                      break;
    1.38                  }
    1.39                  case opc_arraylength: