# HG changeset patch # User Jaroslav Tulach # Date 1358169649 -3600 # Node ID 5b3d5ed03014aa5455bfec576d815b7c972d43b9 # Parent 9e4f01dd6acb75e64a9295a4fdb4c6e2e48ccd2a Fill object arrays with null, otherwise use 0 diff -r 9e4f01dd6acb -r 5b3d5ed03014 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 Mon Jan 14 13:21:40 2013 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Mon Jan 14 14:20:49 2013 +0100 @@ -2,8 +2,8 @@ vm.java_lang_String(false); // we need initialized arrays -Array.prototype.fillNulls = function() { - for(var i = 0; i < this.length; i++) this[i] = null; +Array.prototype.fillWith = function(value) { + for(var i = 0; i < this.length; i++) this[i] = value; return this; }; Array.prototype.clone__Ljava_lang_Object_2 = function() { diff -r 9e4f01dd6acb -r 5b3d5ed03014 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 13:21:40 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 14:20:49 2013 +0100 @@ -910,19 +910,19 @@ } case opc_newarray: ++i; // skip type of array - emit(out, "@2 = new Array(@1).fillNulls();", + emit(out, "@2 = new Array(@1).fillWith(0);", smapper.popI(), smapper.pushA()); break; case opc_anewarray: i += 2; // skip type of array - emit(out, "@2 = new Array(@1).fillNulls();", + emit(out, "@2 = new Array(@1).fillWith(null);", smapper.popI(), smapper.pushA()); break; case opc_multianewarray: { i += 2; int dim = readByte(byteCodes, ++i); out.append("{ var a0 = new Array(").append(smapper.popI()) - .append(").fillNulls();"); + .append(").fillWith(null);"); for (int d = 1; d < dim; d++) { out.append("\n var l" + d).append(" = ") .append(smapper.popI()).append(';'); @@ -930,7 +930,7 @@ append(" < a" + (d - 1)). append(".length; i" + d).append("++) {"); out.append("\n var a" + d). - append (" = new Array(l" + d).append(").fillNulls();"); + append (" = new Array(l" + d).append(").fillWith(null);"); out.append("\n a" + (d - 1)).append("[i" + d).append("] = a" + d). append(";"); } diff -r 9e4f01dd6acb -r 5b3d5ed03014 vm/src/test/java/org/apidesign/vm4brwsr/Array.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Mon Jan 14 13:21:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Mon Jan 14 14:20:49 2013 +0100 @@ -98,6 +98,11 @@ return sum; } + public static int sum(int size) { + int[] arr = new int[size]; + return arr[0] + arr[1]; + } + static void arraycopy(char[] value, int srcBegin, char[] dst, int dstBegin, int count) { while (count-- > 0) { dst[dstBegin++] = value[srcBegin++]; diff -r 9e4f01dd6acb -r 5b3d5ed03014 vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Mon Jan 14 13:21:40 2013 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Mon Jan 14 14:20:49 2013 +0100 @@ -27,6 +27,11 @@ * @author Jaroslav Tulach */ public class ArrayTest { + @Test public void intArrayShouldBeFilledWithZeroes() throws Exception { + assertExec("0 + 0", Array.class, "sum__II", + Double.valueOf(0), 2 + ); + } @Test public void verifySimpleIntOperation() throws Exception { assertExec("CheckTheSum", Array.class, "simple__IZ", Double.valueOf(15), false