Index: runtime/lib/array_patch.dart |
diff --git a/runtime/lib/array_patch.dart b/runtime/lib/array_patch.dart |
index 2887a994d7a07dbd7c43d6934e0144a6fbaa36d3..bdcf29ccbcfbd586e1828e281f6bec513924cf35 100644 |
--- a/runtime/lib/array_patch.dart |
+++ b/runtime/lib/array_patch.dart |
@@ -6,12 +6,43 @@ |
// returns a _GrowableObjectArray if length is null, otherwise returns |
// fixed size array. |
patch class List<E> { |
- /* patch */ factory List([int length = null]) { |
- if (length == null) { |
- return new _GrowableObjectArray<E>(); |
- } else { |
- return new _ObjectArray<E>(length); |
+ /* patch */ factory List([int length = 0]) { |
+ if (length is! int || length < 0) { |
+ throw new ArgumentError("Length must be a positive integer: $length."); |
} |
+ _GrowableObjectArray<E> result = new _GrowableObjectArray<E>(); |
+ result.length = length; |
+ return result; |
+ } |
+ |
+ /* patch */ factory List.fixedLength(int length, {E fill: null}) { |
+ if (length is! int || length < 0) { |
+ throw new ArgumentError("Length must be a positive integer: $length."); |
+ } |
+ _ObjectArray<E> result = new _ObjectArray<E>(length); |
+ if (fill != null) { |
+ for (int i = 0; i < length; i++) { |
+ result[i] = fill; |
+ } |
+ } |
+ return result; |
+ } |
+ |
+ /* patch */ factory List.filled(int length, E fill) { |
+ if (length is! int || length < 0) { |
+ throw new ArgumentError("Length must be a positive integer: $length."); |
+ } |
+ _GrowableObjectArray<E> result = |
+ new _GrowableObjectArray<E>.withCapacity(length < 4 ? 4 : length); |
+ if (length != 0) { |
+ result.length = length; |
+ if (fill != null) { |
+ for (int i = 0; i < length; i++) { |
+ result[i] = fill; |
+ } |
+ } |
+ } |
+ return result; |
} |
// Factory constructing a mutable List from a parser generated List literal. |