Files
sdk/compiler/lib/implementation/array.js
T
kasperl@google.com ac0e22f2bc Fix dartc in optimized mode (broken in r3358).
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
2012-01-18 12:44:47 +00:00

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;
}