| Index: runtime/lib/array.dart
|
| diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
|
| index 78d30f784c4881a72821297bc853313251507d91..5ad34037a7cbb8a5e3c2357f8ff7c7b570069f86 100644
|
| --- a/runtime/lib/array.dart
|
| +++ b/runtime/lib/array.dart
|
| @@ -102,11 +102,12 @@ class _List<E> implements List<E> {
|
| Lists.indicesCheck(this, start, end);
|
| if (end == null) end = this.length;
|
| int length = end - start;
|
| - if (start == end) return [];
|
| - List list = new _GrowableList<E>.withCapacity(length);
|
| - list.length = length;
|
| - Lists.copy(this, start, list, 0, length);
|
| - return list;
|
| + if (start == end) return <E>[];
|
| + List list = new _List(length);
|
| + list._copyFromObjectArray(this, start, 0, length);
|
| + var result = new _GrowableList<E>.withData(list);
|
| + result._setLength(length);
|
| + return result;
|
| }
|
|
|
| // Iterable interface.
|
| @@ -249,8 +250,15 @@ class _List<E> implements List<E> {
|
| throw IterableElementError.tooMany();
|
| }
|
|
|
| - List<E> toList({ bool growable: true}) {
|
| - return new List<E>.from(this, growable: growable);
|
| + List<E> toList({ bool growable: true }) {
|
| + var length = this.length;
|
| + var result = growable ? new _List(length) : new _List<E>(length);
|
| + result._copyFromObjectArray(this, 0, 0, length);
|
| + if (growable) {
|
| + result = new _GrowableList<E>.withData(result);
|
| + result._setLength(length);
|
| + }
|
| + return result;
|
| }
|
|
|
| Set<E> toSet() {
|
| @@ -340,11 +348,12 @@ class _ImmutableList<E> implements List<E> {
|
| Lists.indicesCheck(this, start, end);
|
| if (end == null) end = this.length;
|
| int length = end - start;
|
| - if (start == end) return [];
|
| - List list = new List<E>();
|
| - list.length = length;
|
| + if (start == end) return <E>[];
|
| + List list = new _List(length);
|
| Lists.copy(this, start, list, 0, length);
|
| - return list;
|
| + var result = new _GrowableList<E>.withData(list);
|
| + result._setLength(length);
|
| + return result;
|
| }
|
|
|
| Iterable<E> getRange(int start, int end) {
|
| @@ -496,7 +505,10 @@ class _ImmutableList<E> implements List<E> {
|
| }
|
|
|
| List<E> toList({ bool growable: true }) {
|
| - return new List<E>.from(this, growable: growable);
|
| + int length = this.length;
|
| + List list = growable ? new _GrowableList<E>(length) : new _List<E>(length);
|
| + Lists.copy(this, 0, list, 0, length);
|
| + return list;
|
| }
|
|
|
| Set<E> toSet() {
|
|
|