Only do range check when the array value is not defined closure
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 12 May 2014 11:18:46 +0200
branchclosure
changeset 155969fb5d5d734a
parent 1558 0c5a8b83182a
child 1560 2e415b91c046
Only do range check when the array value is not defined
rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js
     1.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Sun May 11 23:06:45 2014 +0200
     1.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Mon May 12 11:18:46 2014 +0200
     1.3 @@ -3,15 +3,17 @@
     1.4  vm.java_lang_String(false);
     1.5  
     1.6  Array.at = function(arr, indx, value) {
     1.7 -  if (indx < 0 || indx >= arr.length) {
     1.8 -      var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
     1.9 -      e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
    1.10 -      throw e;
    1.11 +  var prev = arr[indx];
    1.12 +  if (typeof prev === 'undefined' && (x < 0 || indx >= arr.length)) {
    1.13 +    var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
    1.14 +    e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
    1.15 +    throw e;
    1.16    }
    1.17    if (arguments.length === 3) {
    1.18 -      arr[indx] = value;
    1.19 +    arr[indx] = value;
    1.20 +  } else {
    1.21 +    return prev;
    1.22    }
    1.23 -  return arr[indx];
    1.24  };
    1.25  Array.prototype.getClass__Ljava_lang_Class_2 = function() {
    1.26    return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2Ljava_lang_Object_2(this.jvmName, this.fnc);