Skip to content

Commit

Permalink
Deprecate checkValidIndex and avoid using it in the core library.
Browse files Browse the repository at this point in the history
TEST=No new behaviour, existing tests pass.

Change-Id: Ia7a8e58543bd5e1d8dd14bd46c5083759333845b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/259104
Reviewed-by: Nate Bosch <nbosch@google.com>
Reviewed-by: Lasse Nielsen <lrn@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
  • Loading branch information
kallentu authored and Commit Queue committed Nov 8, 2022
1 parent e61ac81 commit 63b49df
Show file tree
Hide file tree
Showing 31 changed files with 407 additions and 225 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Expand Up @@ -66,6 +66,9 @@
- Deprecated `FallThroughError`. Has not been thrown since Dart 2.0
(see [#49529]).
- Added `copyWith` extension method on `DateTime` (see [#24644]).
- Deprecated `RangeError.checkValidIndex` in favor of `IndexError.check`.
- Deprecated `IndexError` constructor in favor of `IndexError.withLength`
constructor.

[#49529]: https://github.com/dart-lang/sdk/issues/49529
[#24644]: https://github.com/dart-lang/sdk/issues/24644
Expand Down
Expand Up @@ -21,7 +21,7 @@ extension _ElementExtension on Element {
/// is a match up to [thisIndex].
Element? _locateElement(ElementLocation location, int thisIndex) {
final components = location.components;
RangeError.checkValidIndex(thisIndex, components);
IndexError.check(thisIndex, components.length, indexable: components);

final nextIndex = thisIndex + 1;
if (nextIndex == components.length) {
Expand Down
6 changes: 4 additions & 2 deletions runtime/tests/vm/dart/regress_47010_test.dart
Expand Up @@ -61,8 +61,10 @@ ArgumentError var46 = ArgumentError.value(22, 'K90\u{1f600}QtS', 33);
ArgumentError? var47 = ArgumentError.notNull(')');
RangeError var48 = RangeError.range(2, 23, 36, 'H', 'w&');
RangeError? var49 = new RangeError(22);
IndexError var50 = IndexError(15, 14, 'ZuC', '#1z9xJ', 1);
IndexError? var51 = IndexError(14, 36, 'V(', '9Jf!0\u2665', 2);
IndexError var50 =
IndexError.withLength(15, 1, indexable: 14, name: 'ZuC', message: '#1z9xJ');
IndexError? var51 = IndexError.withLength(14, 2,
indexable: 36, name: 'V(', message: '9Jf!0\u2665');
FallThroughError var52 = FallThroughError();
FallThroughError? var53 = FallThroughError();
AbstractClassInstantiationError var54 = AbstractClassInstantiationError('J!');
Expand Down
17 changes: 12 additions & 5 deletions runtime/tests/vm/dart_2/regress_40462_test.dart
Expand Up @@ -51,8 +51,10 @@ TypeError var22 = TypeError();
CastError var23 = CastError();
NullThrownError var24 = new NullThrownError();
ArgumentError var25 = ArgumentError.value(27, '', 18);
RangeError var26 = RangeError.index(1, 42, '+m', 'JjY', 46);
IndexError var27 = IndexError(38, 29, 'R1Z', 'VnR7', 13);
RangeError var26 =
IndexError.withLength(1, 46, indexable: 42, name: '+m', message: 'JjY');
IndexError var27 =
IndexError.withLength(38, 13, indexable: 29, name: 'R1Z', message: 'VnR7');
FallThroughError var28 = new FallThroughError();
AbstractClassInstantiationError var29 = AbstractClassInstantiationError('Sq');
UnsupportedError var30 = UnsupportedError('(OXv');
Expand Down Expand Up @@ -899,7 +901,8 @@ class X1 extends X0 {

@override
Int32x4List call(int par1) {
var26 ??= IndexError(27, 18, '+Qy9', '', 6);
var26 ??=
IndexError.withLength(27, 6, indexable: 18, name: '+Qy9', message: '');
{
int loc0 = 41;
while (--loc0 > 0) {
Expand Down Expand Up @@ -939,7 +942,10 @@ class X1 extends X0 {
((loc0).modInverse(loc1) as int)))
.isNegative),
('D\u2665Sp' ==
IndexError(14, 12, 'PDTOXf', '&5e', 13))
IndexError.withLength(14, 13,
indexable: 12,
name: 'PDTOXf',
message: '&5e'))
]) ??
[true, (!(false))])
: [true]));
Expand Down Expand Up @@ -984,7 +990,8 @@ extension XE1 on X1 {
: CastError());
}
}
return IndexError(15, 17, 'yw', '', 20);
return IndexError.withLength(15, 20,
indexable: 17, name: 'yw', message: '');
}

Expando<String> foo1_Extension1() {
Expand Down
64 changes: 32 additions & 32 deletions runtime/vm/compiler/recognized_methods_list.h
Expand Up @@ -384,40 +384,40 @@ namespace dart {
V(_IntegerImplementation, <<, Integer_shl, 0x4a95c65b) \

#define GRAPH_TYPED_DATA_INTRINSICS_LIST(V) \
V(_Int8List, [], Int8ArrayGetIndexed, 0x35f3fab6) \
V(_Int8List, []=, Int8ArraySetIndexed, 0x6e4fdaa7) \
V(_Uint8List, [], Uint8ArrayGetIndexed, 0x9b6c7e76) \
V(_Uint8List, []=, Uint8ArraySetIndexed, 0xbadee66b) \
V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x9b6c7e76) \
V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0xbadee66b) \
V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x9b6c7e76) \
V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xb0de9c0b) \
V(_Int8List, [], Int8ArrayGetIndexed, 0x3cf7f9ce) \
V(_Int8List, []=, Int8ArraySetIndexed, 0xf6867b8f) \
V(_Uint8List, [], Uint8ArrayGetIndexed, 0xa2707d8e) \
V(_Uint8List, []=, Uint8ArraySetIndexed, 0x43158753) \
V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xa2707d8e) \
V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x43158753) \
V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xa2707d8e) \
V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x39153cf3) \
V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed, \
0x9b6c7e76) \
0xa2707d8e) \
V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed, \
0xb0de9c0b) \
V(_Int16List, [], Int16ArrayGetIndexed, 0x15f25a16) \
V(_Int16List, []=, Int16ArraySetIndexed, 0xfecf9e32) \
V(_Uint16List, [], Uint16ArrayGetIndexed, 0xf9cb3616) \
V(_Uint16List, []=, Uint16ArraySetIndexed, 0xe71245a9) \
V(_Int32List, [], Int32ArrayGetIndexed, 0x178fffb5) \
V(_Int32List, []=, Int32ArraySetIndexed, 0xdd041ad1) \
V(_Uint32List, [], Uint32ArrayGetIndexed, 0x66e26555) \
V(_Uint32List, []=, Uint32ArraySetIndexed, 0xc8a78f51) \
V(_Int64List, [], Int64ArrayGetIndexed, 0x505859f5) \
V(_Int64List, []=, Int64ArraySetIndexed, 0x5a2e23b7) \
V(_Uint64List, [], Uint64ArrayGetIndexed, 0x8d1cbf75) \
V(_Uint64List, []=, Uint64ArraySetIndexed, 0x258f94ef) \
V(_Float64List, [], Float64ArrayGetIndexed, 0x6d778ebc) \
V(_Float64List, []=, Float64ArraySetIndexed, 0xed47a595) \
V(_Float32List, [], Float32ArrayGetIndexed, 0x43758fdc) \
V(_Float32List, []=, Float32ArraySetIndexed, 0x489602c3) \
V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xed5d8d35) \
V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x0b093d30) \
V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x834607ad) \
V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x17a2cbc0) \
V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xea0577df) \
V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x8af8aa58) \
0x39153cf3) \
V(_Int16List, [], Int16ArrayGetIndexed, 0x1cf6592e) \
V(_Int16List, []=, Int16ArraySetIndexed, 0x87063f1a) \
V(_Uint16List, [], Uint16ArrayGetIndexed, 0x00cf352e) \
V(_Uint16List, []=, Uint16ArraySetIndexed, 0x6f48e691) \
V(_Int32List, [], Int32ArrayGetIndexed, 0x1e93fecd) \
V(_Int32List, []=, Int32ArraySetIndexed, 0x653abbb9) \
V(_Uint32List, [], Uint32ArrayGetIndexed, 0x6de6646d) \
V(_Uint32List, []=, Uint32ArraySetIndexed, 0x50de3039) \
V(_Int64List, [], Int64ArrayGetIndexed, 0x575c590d) \
V(_Int64List, []=, Int64ArraySetIndexed, 0x905d6bcf) \
V(_Uint64List, [], Uint64ArrayGetIndexed, 0x9420be8d) \
V(_Uint64List, []=, Uint64ArraySetIndexed, 0x5bbedd07) \
V(_Float64List, [], Float64ArrayGetIndexed, 0x91192954) \
V(_Float64List, []=, Float64ArraySetIndexed, 0x8f1ba92d) \
V(_Float32List, [], Float32ArrayGetIndexed, 0x67172a74) \
V(_Float32List, []=, Float32ArraySetIndexed, 0xea6a065b) \
V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0x68d7290d) \
V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x6eb9f208) \
V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x7e4ff185) \
V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x58084e98) \
V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xb2996c37) \
V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x5e8f97b0) \
V(_TypedListBase, get:length, TypedListBaseLength, 0x5850f06b) \
V(_ByteDataView, get:length, ByteDataViewLength, 0x5850f06b) \
V(_Float32x4, get:x, Float32x4GetX, 0x3a398530) \
Expand Down
4 changes: 2 additions & 2 deletions sdk/lib/_internal/js_dev_runtime/private/js_array.dart
Expand Up @@ -626,12 +626,12 @@ class JSArray<E> implements List<E>, JSIndexable<E> {
}

void set first(E element) {
if (this.isEmpty) throw RangeError.index(0, this);
if (this.isEmpty) throw IndexError.withLength(0, length, indexable: this);
this[0] = element;
}

void set last(E element) {
if (this.isEmpty) throw RangeError.index(0, this);
if (this.isEmpty) throw IndexError.withLength(0, length, indexable: this);
this[this.length - 1] = element;
}
}
Expand Down
6 changes: 4 additions & 2 deletions sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
Expand Up @@ -478,9 +478,11 @@ class Primitives {
Error diagnoseIndexError(indexable, int index) {
int length = indexable.length;
// The following returns the same error that would be thrown by calling
// [RangeError.checkValidIndex] with no optional parameters provided.
// [IndexError.check] with no optional parameters
// provided.
if (index < 0 || index >= length) {
return RangeError.index(index, indexable, 'index', null, length);
return IndexError.withLength(index, length,
indexable: indexable, name: 'index');
}
// The above should always match, but if it does not, use the following.
return RangeError.value(index, 'index');
Expand Down
2 changes: 1 addition & 1 deletion sdk/lib/_internal/js_dev_runtime/private/js_string.dart
Expand Up @@ -20,7 +20,7 @@ class JSString extends Interceptor implements String, JSIndexable<String> {
// (JS String.length cannot be null).
final len = this.length;
if (index < 0 || index >= len) {
throw RangeError.index(index, this, 'index', null, len);
throw IndexError.withLength(index, len, indexable: this, name: 'index');
}
return JS<int>('!', r'#.charCodeAt(#)', this, index);
}
Expand Down
6 changes: 4 additions & 2 deletions sdk/lib/_internal/js_runtime/lib/js_helper.dart
Expand Up @@ -1047,9 +1047,11 @@ Error diagnoseIndexError(indexable, index) {
if (index is! int) return new ArgumentError.value(index, 'index');
int length = indexable.length;
// The following returns the same error that would be thrown by calling
// [RangeError.checkValidIndex] with no optional parameters provided.
// [IndexError.check] with no optional parameters
// provided.
if (index < 0 || index >= length) {
return new RangeError.index(index, indexable, 'index', null, length);
return new IndexError.withLength(index, length,
indexable: indexable, name: 'index');
}
// The above should always match, but if it does not, use the following.
return new RangeError.value(index, 'index');
Expand Down

0 comments on commit 63b49df

Please sign in to comment.