Index: runtime/lib/array.dart |
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart |
index e4ee5601a9421aa92a44ddd294930c37ddcd321e..1a8977eb6c4c48161109bebc02ae5100a77173b7 100644 |
--- a/runtime/lib/array.dart |
+++ b/runtime/lib/array.dart |
@@ -82,15 +82,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); |
srdjan
2013/03/18 16:24:41
It seems that this version of sublist is considera
|
+ 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) { |
@@ -325,15 +330,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) { |