Index: compiler/lib/implementation/array.dart |
=================================================================== |
--- compiler/lib/implementation/array.dart (revision 486) |
+++ compiler/lib/implementation/array.dart (working copy) |
@@ -2,47 +2,6 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-class ArrayFactory { |
- factory Array<E>.from(Iterable<E> other) { |
- Array<E> array = new Array<E>(); |
- for (final e in other) { |
- array.add(e); |
- } |
- return array; |
- } |
- |
- factory Array<E>.fromArray(Array<E> other, int startIndex, int endIndex) { |
- Array array = new Array<E>(); |
- if (endIndex > other.length) endIndex = other.length; |
- if (startIndex < 0) startIndex = 0; |
- int count = endIndex - startIndex; |
- if (count > 0) { |
- array.length = count; |
- Arrays.copy(other, startIndex, array, 0, count); |
- } |
- return array; |
- } |
- |
- factory Array<E>([int length = null]) { |
- bool isFixed = true; |
- if (length === null) { |
- length = 0; |
- isFixed = false; |
- } else if (length < 0) { |
- throw new IllegalArgumentException("negative length $length"); |
- } |
- // TODO(floitsch): make array creation more efficient. Currently we allocate |
- // a new TypeToken at every allocation. Either we can optimize them away, |
- // or we need to find other ways to pass type-information from Dart to JS. |
- ObjectArray array = _new(new TypeToken<E>(), length); |
- array._isFixed = isFixed; |
- return array; |
- } |
- |
- static ObjectArray _new(TypeToken typeToken, int length) native; |
-} |
- |
- |
class ListFactory { |
factory List<E>.from(Iterable<E> other) { |
List<E> list = new List<E>(); |
@@ -52,8 +11,7 @@ |
return list; |
} |
- // TODO(bak): Until the final transition Array type is needed for other |
- factory List<E>.fromList(Array<E> other, int startIndex, int endIndex) { |
+ factory List<E>.fromList(List<E> other, int startIndex, int endIndex) { |
List list = new List<E>(); |
if (endIndex > other.length) endIndex = other.length; |
if (startIndex < 0) startIndex = 0; |
@@ -73,21 +31,21 @@ |
} else if (length < 0) { |
throw new IllegalArgumentException("negative length $length"); |
} |
- // TODO(floitsch): make array creation more efficient. Currently we allocate |
+ // TODO(floitsch): make list creation more efficient. Currently we allocate |
// a new TypeToken at every allocation. Either we can optimize them away, |
// or we need to find other ways to pass type-information from Dart to JS. |
- ObjectArray list = _new(new TypeToken<E>(), length); |
+ ListImplementation list = _new(new TypeToken<E>(), length); |
list._isFixed = isFixed; |
return list; |
} |
- static ObjectArray _new(TypeToken typeToken, int length) native; |
+ static ListImplementation _new(TypeToken typeToken, int length) native; |
} |
-class ObjectArray<T> implements Array<T> native "Array" { |
- // ObjectArray maps directly to a JavaScript array. If the array is |
- // constructed by the ArrayFactory.Array constructor, it has an |
+class ListImplementation<T> implements List<T> native "Array" { |
+ // ListImplementation maps directly to a JavaScript array. If the list is |
+ // constructed by the ListFactory.List constructor, it has an |
// additional named property for '_isFixed'. If it is a literal, the |
// code generator will not add the property. It will be 'undefined' |
// and coerce to false. |
@@ -109,9 +67,9 @@ |
Iterator<T> iterator() { |
if (_isFixed) { |
- return new FixedSizeArrayIterator<T>(this); |
+ return new FixedSizeListIterator<T>(this); |
} else { |
- return new VariableSizeArrayIterator<T>(this); |
+ return new VariableSizeListIterator<T>(this); |
} |
} |
@@ -128,7 +86,7 @@ |
} |
Collection<T> filter(bool f(T element)) { |
- return Collections.filter(this, new Array<T>(), f); |
+ return Collections.filter(this, new List<T>(), f); |
} |
bool every(bool f(T element)) { |
@@ -147,14 +105,14 @@ |
DualPivotQuicksort.sort(this, compare); |
} |
- void copyFrom(Array<Object> src, int srcStart, int dstStart, int count) { |
+ void copyFrom(List<Object> src, int srcStart, int dstStart, int count) { |
Arrays.copy(src, srcStart, this, dstStart, count); |
} |
void setRange(int start, int length, List<T> from, [int startFrom = 0]) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot remove range of a non-extendable array"); |
+ "Cannot remove range of a non-extendable list"); |
} |
if (length == 0) { |
return; |
@@ -166,7 +124,7 @@ |
void removeRange(int start, int length) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot remove range of a non-extendable array"); |
+ "Cannot remove range of a non-extendable list"); |
} |
if (length == 0) { |
return; |
@@ -178,7 +136,7 @@ |
void insertRange(int start, int length, [T initialValue = null]) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot insert range in a non-extendable array"); |
+ "Cannot insert range in a non-extendable list"); |
} |
if (length == 0) { |
return; |
@@ -209,7 +167,7 @@ |
void add(T element) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot add to a non-extendable array"); |
+ "Cannot add to a non-extendable list"); |
} else { |
_add(element); |
} |
@@ -222,7 +180,7 @@ |
void addAll(Collection<T> elements) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot add to a non-extendable array"); |
+ "Cannot add to a non-extendable list"); |
} else { |
for (final e in elements) { |
_add(e); |
@@ -233,7 +191,7 @@ |
void clear() { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot clear a non-extendable array"); |
+ "Cannot clear a non-extendable list"); |
} else { |
length = 0; |
} |
@@ -242,7 +200,7 @@ |
void set length(int length) { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot change the length of a non-extendable array"); |
+ "Cannot change the length of a non-extendable list"); |
} else { |
_setLength(length); |
} |
@@ -251,7 +209,7 @@ |
T removeLast() { |
if (_isFixed) { |
throw const UnsupportedOperationException( |
- "Cannot remove in a non-extendable array"); |
+ "Cannot remove in a non-extendable list"); |
} else { |
T element = last(); |
length = length - 1; |
@@ -265,51 +223,51 @@ |
} |
-// Iterator for arrays with fixed size. |
-class FixedSizeArrayIterator<T> extends VariableSizeArrayIterator<T> { |
- FixedSizeArrayIterator(Array array) |
- : super(array), |
- _length = array.length { |
+// Iterator for lists with fixed size. |
+class FixedSizeListIterator<T> extends VariableSizeListIterator<T> { |
+ FixedSizeListIterator(List list) |
+ : super(list), |
+ _length = list.length { |
} |
bool hasNext() { |
return _length > _pos; |
} |
- final int _length; // Cache array length for faster access. |
+ final int _length; // Cache list length for faster access. |
} |
-// Iterator for arrays with variable size. |
-class VariableSizeArrayIterator<T> implements Iterator<T> { |
- VariableSizeArrayIterator(Array<T> array) |
- : _array = array, |
+// Iterator for lists with variable size. |
+class VariableSizeListIterator<T> implements Iterator<T> { |
+ VariableSizeListIterator(List<T> list) |
+ : _list = list, |
_pos = 0 { |
} |
bool hasNext() { |
- return _array.length > _pos; |
+ return _list.length > _pos; |
} |
T next() { |
if (!hasNext()) { |
throw const NoMoreElementsException(); |
} |
- return _array[_pos++]; |
+ return _list[_pos++]; |
} |
- final Array<T> _array; |
+ final List<T> _list; |
int _pos; |
} |
-class _ArrayJsUtil { |
- static int _arrayLength(Array array) native { |
- return array.length; |
+class _ListJsUtil { |
+ static int _listLength(List list) native { |
+ return list.length; |
} |
- static Array _newArray(int len) native { |
- return new Array(len); |
+ static List _newList(int len) native { |
+ return new List(len); |
} |
static void _throwIndexOutOfRangeException(int index) native { |