# HG changeset patch # User Jaroslav Tulach # Date 1358250273 -3600 # Node ID a2871a3fd4c5e0450ee50cdb7e507721fa4d9d65 # Parent b157a354003f0f1e3d9cdf6120ccc948aa41b759 ArrayIndexOutOfBoundsEx on writes diff -r b157a354003f -r a2871a3fd4c5 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 Tue Jan 15 12:38:49 2013 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Tue Jan 15 12:44:33 2013 +0100 @@ -7,12 +7,15 @@ this.jvmName = sig; return this; }; -Array.prototype.at = function(indx) { +Array.prototype.at = function(indx, value) { if (indx < 0 || indx > this.length) { var e = vm.java_lang_ArrayIndexOutOfBoundsException(true); e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString()); throw e; } + if (arguments.length === 2) { + this[indx] = value; + } return this[indx]; }; Array.prototype.getClass__Ljava_lang_Class_2 = function() { diff -r b157a354003f -r a2871a3fd4c5 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 15 12:38:49 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 15 12:44:33 2013 +0100 @@ -973,26 +973,26 @@ emit(out, "@2 = @1.length;", smapper.popA(), smapper.pushI()); break; case opc_lastore: - emit(out, "@3[@2] = @1;", + emit(out, "@3.at(@2, @1);", smapper.popL(), smapper.popI(), smapper.popA()); break; case opc_fastore: - emit(out, "@3[@2] = @1;", + emit(out, "@3.at(@2, @1);", smapper.popF(), smapper.popI(), smapper.popA()); break; case opc_dastore: - emit(out, "@3[@2] = @1;", + emit(out, "@3.at(@2, @1);", smapper.popD(), smapper.popI(), smapper.popA()); break; case opc_aastore: - emit(out, "@3[@2] = @1;", + emit(out, "@3.at(@2, @1);", smapper.popA(), smapper.popI(), smapper.popA()); break; case opc_iastore: case opc_bastore: case opc_castore: case opc_sastore: - emit(out, "@3[@2] = @1;", + emit(out, "@3.at(@2, @1);", smapper.popI(), smapper.popI(), smapper.popA()); break; case opc_laload: diff -r b157a354003f -r a2871a3fd4c5 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CompareByteArrayTest.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CompareByteArrayTest.java Tue Jan 15 12:38:49 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CompareByteArrayTest.java Tue Jan 15 12:44:33 2013 +0100 @@ -61,10 +61,22 @@ return atIndex(-1); } + @Compare public String toOfBounds() { + return toIndex(5); + } + + @Compare public String toOfBoundsMinus() { + return toIndex(-1); + } + private static final int[] arr = { 0, 1, 2 }; public static String atIndex(int at) { return "at@" + arr[at]; } + public static String toIndex(int at) { + arr[at] = 10; + return "ok"; + } @Factory