Chromium Code Reviews| Index: runtime/lib/array.dart |
| diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart |
| index bcbcc55deae7f3d4d24f8f334d2150e2b3ac2154..c26b67c3a57c8f9143211c0363bb915005677e78 100644 |
| --- a/runtime/lib/array.dart |
| +++ b/runtime/lib/array.dart |
| @@ -77,15 +77,20 @@ class _ObjectArray<E> implements List<E> { |
| "Cannot insert range in a non-extendable array"); |
| } |
| - List<E> getRange(int start, int length) { |
| - if (length == 0) return []; |
| - Arrays.rangeCheck(this, start, length); |
| + |
| + List<E> sublist(int start, [int end]) { |
| + Arrays.indicesCheck(this, start, end); |
|
floitsch
2013/03/14 15:46:06
I would make this an IterableMixinWorkaround metho
Lasse Reichstein Nielsen
2013/03/15 09:13:09
It would not be a method on a mixin when we get mi
|
| + if (end == null) end = this.length; |
| + int length = end - start; |
| + if (start == end) return []; |
| List list = new _GrowableObjectArray<E>.withCapacity(length); |
| list.length = length; |
| Arrays.copy(this, start, list, 0, length); |
| return list; |
| } |
| + List<E> getRange(int start, int length) => sublist(start, start + length); |
| + |
| // Iterable interface. |
| bool contains(E element) { |
| @@ -315,15 +320,19 @@ class _ImmutableArray<E> implements List<E> { |
| "Cannot insert range in an immutable array"); |
| } |
| - List<E> getRange(int start, int length) { |
| - if (length == 0) return []; |
| - Arrays.rangeCheck(this, start, length); |
| + List<E> sublist(int start, [int end]) { |
| + Arrays.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; |
| Arrays.copy(this, start, list, 0, length); |
| return list; |
| } |
| + List<E> getRange(int start, int length) => sublist(start, start + length); |
| + |
| // Collection interface. |
| bool contains(E element) { |