1.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Tue Jan 15 12:26:19 2013 +0100
1.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Tue Jan 15 12:38:49 2013 +0100
1.3 @@ -7,6 +7,14 @@
1.4 this.jvmName = sig;
1.5 return this;
1.6 };
1.7 +Array.prototype.at = function(indx) {
1.8 + if (indx < 0 || indx > this.length) {
1.9 + var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
1.10 + e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
1.11 + throw e;
1.12 + }
1.13 + return this[indx];
1.14 +};
1.15 Array.prototype.getClass__Ljava_lang_Class_2 = function() {
1.16 return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2(this.jvmName);
1.17 };
2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 15 12:26:19 2013 +0100
2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 15 12:38:49 2013 +0100
2.3 @@ -996,26 +996,26 @@
2.4 smapper.popI(), smapper.popI(), smapper.popA());
2.5 break;
2.6 case opc_laload:
2.7 - emit(out, "@3 = @2[@1];",
2.8 + emit(out, "@3 = @2.at(@1);",
2.9 smapper.popI(), smapper.popA(), smapper.pushL());
2.10 break;
2.11 case opc_faload:
2.12 - emit(out, "@3 = @2[@1];",
2.13 + emit(out, "@3 = @2.at(@1);",
2.14 smapper.popI(), smapper.popA(), smapper.pushF());
2.15 break;
2.16 case opc_daload:
2.17 - emit(out, "@3 = @2[@1];",
2.18 + emit(out, "@3 = @2.at(@1);",
2.19 smapper.popI(), smapper.popA(), smapper.pushD());
2.20 break;
2.21 case opc_aaload:
2.22 - emit(out, "@3 = @2[@1];",
2.23 + emit(out, "@3 = @2.at(@1);",
2.24 smapper.popI(), smapper.popA(), smapper.pushA());
2.25 break;
2.26 case opc_iaload:
2.27 case opc_baload:
2.28 case opc_caload:
2.29 case opc_saload:
2.30 - emit(out, "@3 = @2[@1];",
2.31 + emit(out, "@3 = @2.at(@1);",
2.32 smapper.popI(), smapper.popA(), smapper.pushI());
2.33 break;
2.34 case opc_pop:
3.1 --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CompareByteArrayTest.java Tue Jan 15 12:26:19 2013 +0100
3.2 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CompareByteArrayTest.java Tue Jan 15 12:38:49 2013 +0100
3.3 @@ -49,6 +49,24 @@
3.4 return sum;
3.5 }
3.6
3.7 + @Compare public String noOutOfBounds() {
3.8 + return atIndex(1);
3.9 + }
3.10 +
3.11 + @Compare public String outOfBounds() {
3.12 + return atIndex(5);
3.13 + }
3.14 +
3.15 + @Compare public String outOfBoundsMinus() {
3.16 + return atIndex(-1);
3.17 + }
3.18 +
3.19 + private static final int[] arr = { 0, 1, 2 };
3.20 + public static String atIndex(int at) {
3.21 + return "at@" + arr[at];
3.22 + }
3.23 +
3.24 +
3.25 @Factory
3.26 public static Object[] create() {
3.27 return VMTest.create(CompareByteArrayTest.class);