mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:39:49 +00:00
[vm/corelib] Improve performance of list copying
With NNBD core libraries: ListCopy.toList.100(RunTime) 4129 -> 2376 us. With default core libraries: ListCopy.toList.100(RunTime) 3006 -> 2140 us. Issue: https://github.com/dart-lang/sdk/issues/40917 Change-Id: I7a319b6a150eeb5c4765c299dd45638bed2b4406 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138720 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
This commit is contained in:
parent
ec8941b189
commit
7e0139e0c0
|
@ -373,18 +373,28 @@ class _GrowableList<T> extends ListBase<T> {
|
|||
}
|
||||
|
||||
List<T> toList({bool growable: true}) {
|
||||
var length = this.length;
|
||||
if (length > 0) {
|
||||
List list = growable ? new _List(length) : new _List<T>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
final length = this.length;
|
||||
if (growable) {
|
||||
if (length > 0) {
|
||||
final list = new _List(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
}
|
||||
final result = new _GrowableList<T>._withData(list);
|
||||
result._setLength(length);
|
||||
return result;
|
||||
}
|
||||
if (!growable) return list;
|
||||
var result = new _GrowableList<T>._withData(list);
|
||||
result._setLength(length);
|
||||
return result;
|
||||
return <T>[];
|
||||
} else {
|
||||
if (length > 0) {
|
||||
final list = new _List<T>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
}
|
||||
return list;
|
||||
}
|
||||
return new List<T>(0);
|
||||
}
|
||||
return growable ? <T>[] : new List<T>(0);
|
||||
}
|
||||
|
||||
Set<T> toSet() {
|
||||
|
|
|
@ -373,18 +373,28 @@ class _GrowableList<T> extends ListBase<T> {
|
|||
}
|
||||
|
||||
List<T> toList({bool growable: true}) {
|
||||
var length = this.length;
|
||||
if (length > 0) {
|
||||
final list = new _List<T>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
final length = this.length;
|
||||
if (growable) {
|
||||
if (length > 0) {
|
||||
final list = new _List(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
}
|
||||
final result = new _GrowableList<T>._withData(list);
|
||||
result._setLength(length);
|
||||
return result;
|
||||
}
|
||||
if (!growable) return list;
|
||||
final result = new _GrowableList<T>._withData(list);
|
||||
result._setLength(length);
|
||||
return result;
|
||||
return <T>[];
|
||||
} else {
|
||||
if (length > 0) {
|
||||
final list = new _List<T>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list[i] = this[i];
|
||||
}
|
||||
return list;
|
||||
}
|
||||
return List<T>.empty(growable: false);
|
||||
}
|
||||
return growable ? <T>[] : List<T>.empty(growable: growable);
|
||||
}
|
||||
|
||||
Set<T> toSet() {
|
||||
|
|
Loading…
Reference in a new issue