ac0e22f2bc
Add checks that ensure that keys used for array access are integers. Fix bug in the optimization strategy that ended up generating the wrong code for "native" classes. R=floitsch@google.com,mmendez@google.com BUG= TEST= Review URL: https://chromiumcodereview.appspot.com//9250005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@3390 260f80e4-7a28-3924-810f-c04153c831b5
64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
function native_ListFactory__new(typeToken, length) {
|
|
return RTT.setTypeInfo(
|
|
new Array(length),
|
|
Array.$lookupRTT(RTT.getTypeInfo(typeToken).typeArgs));
|
|
}
|
|
|
|
function native_ListImplementation_INDEX(index) {
|
|
var i = index | 0;
|
|
if (i !== index) {
|
|
native__NumberJsUtil__throwIllegalArgumentException(index);
|
|
} else if (i < 0 || i >= this.length) {
|
|
native__ListJsUtil__throwIndexOutOfRangeException(index);
|
|
}
|
|
return this[i];
|
|
}
|
|
|
|
function native_ListImplementation_ASSIGN_INDEX(index, value) {
|
|
var i = index | 0;
|
|
if (i !== index) {
|
|
native__NumberJsUtil__throwIllegalArgumentException(index);
|
|
} else if (i < 0 || i >= this.length) {
|
|
native__ListJsUtil__throwIndexOutOfRangeException(index);
|
|
}
|
|
this[i] = value;
|
|
}
|
|
|
|
function native_ListImplementation_get$length() {
|
|
return this.length;
|
|
}
|
|
|
|
function native_ListImplementation__setLength(length) {
|
|
this.length = length;
|
|
}
|
|
|
|
function native_ListImplementation__add(element) {
|
|
this.push(element);
|
|
}
|
|
|
|
function native_ListImplementation__removeRange(start, length) {
|
|
this.splice(start, length);
|
|
}
|
|
|
|
function native_ListImplementation__insertRange(start, length, initialValue) {
|
|
var array = [start, 0];
|
|
for (var i = 0; i < length; i++){
|
|
array.push(initialValue);
|
|
}
|
|
this.splice.apply(this, array);
|
|
}
|
|
|
|
function $inlineArrayIndexCheck(array, index) {
|
|
var i = index | 0;
|
|
if (i !== index) {
|
|
native__NumberJsUtil__throwIllegalArgumentException(index);
|
|
} else if (i < 0 || i >= array.length) {
|
|
native__ListJsUtil__throwIndexOutOfRangeException(index);
|
|
}
|
|
return i;
|
|
}
|