| Index: sdk/lib/_internal/compiler/js_lib/js_array.dart
|
| diff --git a/sdk/lib/_internal/compiler/js_lib/js_array.dart b/sdk/lib/_internal/compiler/js_lib/js_array.dart
|
| index d706b7512780c72e7bc400f4396d384557c79c05..7283f21f667f81e6943acb950095d8aa851e1d08 100644
|
| --- a/sdk/lib/_internal/compiler/js_lib/js_array.dart
|
| +++ b/sdk/lib/_internal/compiler/js_lib/js_array.dart
|
| @@ -575,21 +575,28 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable {
|
|
|
| void set length(int newLength) {
|
| checkGrowable('set length');
|
| - if (newLength is !int) throw new ArgumentError(newLength);
|
| - if (newLength < 0) throw new RangeError.value(newLength);
|
| + if (newLength is !int) {
|
| + throw new ArgumentError.value(newLength, 'newLength');
|
| + }
|
| + // TODO(sra): Remove this test and let JavaScript throw an error.
|
| + if (newLength < 0) {
|
| + throw new RangeError.range(newLength, 0, null, 'newLength');
|
| + }
|
| + // JavaScript with throw a RangeError for numbers that are too big. The
|
| + // message does not contain the value.
|
| JS('void', r'#.length = #', this, newLength);
|
| }
|
|
|
| E operator [](int index) {
|
| - if (index is !int) throw new ArgumentError(index);
|
| - if (index >= length || index < 0) throw new RangeError.value(index);
|
| + if (index is !int) throw diagnoseIndexError(this, index);
|
| + if (index >= length || index < 0) throw diagnoseIndexError(this, index);
|
| return JS('var', '#[#]', this, index);
|
| }
|
|
|
| void operator []=(int index, E value) {
|
| checkMutable('indexed set');
|
| - if (index is !int) throw new ArgumentError(index);
|
| - if (index >= length || index < 0) throw new RangeError.value(index);
|
| + if (index is !int) throw diagnoseIndexError(this, index);
|
| + if (index >= length || index < 0) throw diagnoseIndexError(this, index);
|
| JS('void', r'#[#] = #', this, index, value);
|
| }
|
|
|
|
|