mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:01:42 +00:00
Make ListMixin.take check that the argument is not null.
Fixes #41743, #30155 BUG= http://dartbug.com/41743 Change-Id: I223905a92b7353cdc50498d265a6dfe2f2f614d9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/160640 Commit-Queue: Lasse R.H. Nielsen <lrn@google.com> Reviewed-by: Nate Bosch <nbosch@google.com>
This commit is contained in:
parent
0a66c39bbe
commit
4a484c88e1
|
@ -188,7 +188,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
|||
return new dart._internal::SkipWhileIterable::•<dart.core::int*>(this, test);
|
||||
}
|
||||
method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int*>
|
||||
return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, count);
|
||||
return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
|
||||
method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
|
||||
return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
|
||||
}
|
||||
|
|
|
@ -188,7 +188,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
|||
return new dart._internal::SkipWhileIterable::•<dart.core::int*>(this, test);
|
||||
}
|
||||
method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int*>
|
||||
return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, count);
|
||||
return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
|
||||
method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
|
||||
return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
|
||||
}
|
||||
|
|
|
@ -217,7 +217,7 @@ class JSArray<E> implements List<E>, JSIndexable<E> {
|
|||
}
|
||||
|
||||
Iterable<E> take(int n) {
|
||||
return SubListIterable<E>(this, 0, n);
|
||||
return new SubListIterable<E>(this, 0, checkNotNullable(n, "count"));
|
||||
}
|
||||
|
||||
Iterable<E> takeWhile(bool test(E value)) {
|
||||
|
|
|
@ -331,7 +331,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable<E> {
|
|||
}
|
||||
|
||||
Iterable<E> take(int n) {
|
||||
return new SubListIterable<E>(this, 0, n);
|
||||
return new SubListIterable<E>(this, 0, checkNotNullable(n, "count"));
|
||||
}
|
||||
|
||||
Iterable<E> takeWhile(bool test(E value)) {
|
||||
|
|
|
@ -248,7 +248,8 @@ abstract class ListMixin<E> implements List<E> {
|
|||
return SkipWhileIterable<E>(this, test);
|
||||
}
|
||||
|
||||
Iterable<E> take(int count) => SubListIterable<E>(this, 0, count);
|
||||
Iterable<E> take(int count) =>
|
||||
SubListIterable<E>(this, 0, checkNotNullable(count, "count"));
|
||||
|
||||
Iterable<E> takeWhile(bool test(E element)) {
|
||||
return TakeWhileIterable<E>(this, test);
|
||||
|
|
|
@ -204,7 +204,8 @@ abstract class ListIterable<E> extends EfficientLengthIterable<E> {
|
|||
|
||||
Iterable<E> skipWhile(bool test(E element)) => super.skipWhile(test);
|
||||
|
||||
Iterable<E> take(int count) => new SubListIterable<E>(this, 0, count);
|
||||
Iterable<E> take(int count) =>
|
||||
SubListIterable<E>(this, 0, checkNotNullable(count, "count"));
|
||||
|
||||
Iterable<E> takeWhile(bool test(E element)) => super.takeWhile(test);
|
||||
|
||||
|
|
|
@ -180,4 +180,28 @@ main() {
|
|||
Expect.throwsRangeError(() => list3.map((x) => x).skip(-1));
|
||||
Expect.throwsRangeError(() => set1.map((x) => x).skip(-1));
|
||||
Expect.throwsRangeError(() => set2.map((x) => x).skip(-1));
|
||||
|
||||
// Iterable<dynamic>.
|
||||
var take5 = set2.take(0);
|
||||
var it3 = take5.iterator;
|
||||
Expect.isNull(it3.current);
|
||||
Expect.isFalse(it3.moveNext());
|
||||
Expect.isNull(it3.current);
|
||||
|
||||
take5 = set2.take(1);
|
||||
it3 = take5.iterator;
|
||||
Expect.isNull(it3.current);
|
||||
Expect.isFalse(it3.moveNext());
|
||||
Expect.isNull(it3.current);
|
||||
|
||||
Expect.throws(() => list1.take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => list2.take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => list3.take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => set1.take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => set2.take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => list1.map((x) => x).take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => list2.map((x) => x).take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => list3.map((x) => x).take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => set1.map((x) => x).take(-1), (e) => e is RangeError);
|
||||
Expect.throws(() => set2.map((x) => x).take(-1), (e) => e is RangeError);
|
||||
}
|
||||
|
|
|
@ -224,4 +224,15 @@ main() {
|
|||
Expect.throwsRangeError(() => list3.map((x) => x).skip(-1));
|
||||
Expect.throwsRangeError(() => set1.map((x) => x).skip(-1));
|
||||
Expect.throwsRangeError(() => set2.map((x) => x).skip(-1));
|
||||
|
||||
Expect.throws(() => list1.take(null));
|
||||
Expect.throws(() => list2.take(null));
|
||||
Expect.throws(() => list3.take(null));
|
||||
Expect.throws(() => set1.take(null));
|
||||
Expect.throws(() => set2.take(null));
|
||||
Expect.throws(() => list1.map((x) => x).take(null));
|
||||
Expect.throws(() => list2.map((x) => x).take(null));
|
||||
Expect.throws(() => list3.map((x) => x).take(null));
|
||||
Expect.throws(() => set1.map((x) => x).take(null));
|
||||
Expect.throws(() => set2.map((x) => x).take(null));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue