# HG changeset patch # User Jaroslav Tulach # Date 1358531522 -3600 # Node ID 472209ab111288e5954a3058e2aa976e7caa9cc0 # Parent dfebf4fbb7110ff1c4fcf8abc7493c44c8de7e08 Creation of multi dimensional arrays unified under java.lang.reflect.Array diff -r dfebf4fbb711 -r 472209ab1112 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Fri Jan 18 18:35:17 2013 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Fri Jan 18 18:52:02 2013 +0100 @@ -2,12 +2,6 @@ vm.java_lang_reflect_Array(false); vm.java_lang_String(false); -// we need initialized arrays -Array.prototype.initWith = function(sig, value) { - for(var i = 0; i < this.length; i++) this[i] = value; - this.jvmName = sig; - return this; -}; Array.prototype.at = function(indx, value) { if (indx < 0 || indx > this.length) { var e = vm.java_lang_ArrayIndexOutOfBoundsException(true); diff -r dfebf4fbb711 -r 472209ab1112 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jan 18 18:35:17 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jan 18 18:52:02 2013 +0100 @@ -947,26 +947,17 @@ i += 2; String typeName = jc.getClassName(type); int dim = readByte(byteCodes, ++i); - out.append("{ var a0 = new Array(").append(smapper.popI()) - .append(").initWith('").append(typeName).append("', null);"); - for (int d = 1; d < dim; d++) { - typeName = typeName.substring(1); - out.append("\n var l" + d).append(" = ") - .append(smapper.popI()).append(';'); - out.append("\n for (var i" + d).append (" = 0; i" + d). - append(" < a" + (d - 1)). - append(".length; i" + d).append("++) {"); - out.append("\n var a" + d). - append (" = new Array(l" + d).append(").initWith('") - .append(typeName).append("', ") - .append(typeName.length() == 2 ? "0" : "null").append(");"); - out.append("\n a" + (d - 1)).append("[i" + d).append("] = a" + d). - append(";"); + StringBuilder dims = new StringBuilder(); + dims.append('['); + for (int d = 0; d < dim; d++) { + if (d != 0) { + dims.append(","); + } + dims.append(smapper.popI()); } - for (int d = 1; d < dim; d++) { - out.append("\n }"); - } - out.append("\n").append(smapper.pushA()).append(" = a0; }"); + dims.append(']'); + emit(out, "@2 = Array.prototype.multiNewArray__Ljava_lang_Object_2Ljava_lang_String_2_3II('@3', @1, 0);", + dims.toString(), smapper.pushA(), typeName); break; } case opc_arraylength: