| Index: compiler/lib/implementation/array.dart
|
| diff --git a/compiler/lib/implementation/array.dart b/compiler/lib/implementation/array.dart
|
| deleted file mode 100644
|
| index 698f7245bc0f48e19f9bee5d918c8f7f10ba8c16..0000000000000000000000000000000000000000
|
| --- a/compiler/lib/implementation/array.dart
|
| +++ /dev/null
|
| @@ -1,263 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// 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 ListFactory<E> {
|
| - factory List.from(Iterable<E> other) {
|
| - if (other == null) {
|
| - throw const NullPointerException();
|
| - }
|
| - List<E> list = new List<E>();
|
| - for (final e in other) {
|
| - list.add(e);
|
| - }
|
| - return list;
|
| - }
|
| -
|
| - factory List([int length = null]) {
|
| - bool isFixed = true;
|
| - if (length === null) {
|
| - length = 0;
|
| - isFixed = false;
|
| - } else if (length < 0) {
|
| - throw new IllegalArgumentException("negative length $length");
|
| - }
|
| -
|
| - ListImplementation<E> list = new ListImplementation<E>(length);
|
| - list._isFixed = isFixed;
|
| - return list;
|
| - }
|
| -}
|
| -
|
| -
|
| -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.
|
| - bool _isFixed;
|
| -
|
| - ListImplementation(int length);
|
| -
|
| - T operator[](int index) native;
|
| - void operator[]=(int index, T value) native;
|
| -
|
| - Iterator<T> iterator() {
|
| - if (_isFixed) {
|
| - return new FixedSizeListIterator<T>(this);
|
| - } else {
|
| - return new VariableSizeListIterator<T>(this);
|
| - }
|
| - }
|
| -
|
| - int get length() native;
|
| - void _setLength(int length) native;
|
| - void _add(T value) native;
|
| - void _removeRange(int start, int length) native;
|
| - void _insertRange(int start, int length, T initialValue) native;
|
| -
|
| - void forEach(void f(T element)) {
|
| - Collections.forEach(this, f);
|
| - }
|
| -
|
| - Collection map(f(T element)) {
|
| - return Collections.map(this, new List(), f);
|
| - }
|
| -
|
| - Collection<T> filter(bool f(T element)) {
|
| - return Collections.filter(this, new List<T>(), f);
|
| - }
|
| -
|
| - bool every(bool f(T element)) {
|
| - return Collections.every(this, f);
|
| - }
|
| -
|
| - bool some(bool f(T element)) {
|
| - return Collections.some(this, f);
|
| - }
|
| -
|
| - bool isEmpty() {
|
| - return this.length == 0;
|
| - }
|
| -
|
| - void sort(int compare(T a, T b)) {
|
| - DualPivotQuicksort.sort(this, compare);
|
| - }
|
| -
|
| - 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 list");
|
| - }
|
| - if (length == 0) {
|
| - return;
|
| - }
|
| - Arrays.rangeCheck(this, start, length);
|
| - Arrays.copy(from, startFrom, this, start, length);
|
| - }
|
| -
|
| - void removeRange(int start, int length) {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot remove range of a non-extendable list");
|
| - }
|
| - if (length == 0) {
|
| - return;
|
| - }
|
| - Arrays.rangeCheck(this, start, length);
|
| - _removeRange(start, length);
|
| - }
|
| -
|
| - void insertRange(int start, int length, [T initialValue = null]) {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot insert range in a non-extendable list");
|
| - }
|
| - if (length == 0) {
|
| - return;
|
| - }
|
| - if (length < 0) {
|
| - throw new IllegalArgumentException("negative length $length");
|
| - }
|
| - if (start < 0 || start > this.length) {
|
| - throw new IndexOutOfRangeException(start);
|
| - }
|
| - _insertRange(start, length, initialValue);
|
| - }
|
| -
|
| - List<T> getRange(int start, int length) {
|
| - if (length == 0) return [];
|
| - Arrays.rangeCheck(this, start, length);
|
| - List list = new List<T>();
|
| - list.length = length;
|
| - Arrays.copy(this, start, list, 0, length);
|
| - return list;
|
| - }
|
| -
|
| - int indexOf(T element, [int start = 0]) {
|
| - return Arrays.indexOf(this, element, start, this.length);
|
| - }
|
| -
|
| - int lastIndexOf(T element, [int start = null]) {
|
| - if (start === null) start = length - 1;
|
| - return Arrays.lastIndexOf(this, element, start);
|
| - }
|
| -
|
| - void add(T element) {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot add to a non-extendable list");
|
| - } else {
|
| - _add(element);
|
| - }
|
| - }
|
| -
|
| - void addLast(T element) {
|
| - add(element);
|
| - }
|
| -
|
| - void addAll(Collection<T> elements) {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot add to a non-extendable list");
|
| - } else {
|
| - if (elements == null) {
|
| - throw const NullPointerException();
|
| - }
|
| - for (final e in elements) {
|
| - _add(e);
|
| - }
|
| - }
|
| - }
|
| -
|
| - void clear() {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot clear a non-extendable list");
|
| - } else {
|
| - length = 0;
|
| - }
|
| - }
|
| -
|
| - void set length(int length) {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot change the length of a non-extendable list");
|
| - } else {
|
| - _setLength(length);
|
| - }
|
| - }
|
| -
|
| - T removeLast() {
|
| - if (_isFixed) {
|
| - throw const UnsupportedOperationException(
|
| - "Cannot remove in a non-extendable list");
|
| - } else {
|
| - T element = last();
|
| - length = length - 1;
|
| - return element;
|
| - }
|
| - }
|
| -
|
| - T last() {
|
| - return this[length - 1];
|
| - }
|
| -}
|
| -
|
| -
|
| -// 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 list length for faster access.
|
| -}
|
| -
|
| -
|
| -// Iterator for lists with variable size.
|
| -class VariableSizeListIterator<T> implements Iterator<T> {
|
| - VariableSizeListIterator(List<T> list)
|
| - : _list = list,
|
| - _pos = 0 {
|
| - }
|
| -
|
| - bool hasNext() {
|
| - return _list.length > _pos;
|
| - }
|
| -
|
| - T next() {
|
| - if (!hasNext()) {
|
| - throw const NoMoreElementsException();
|
| - }
|
| - return _list[_pos++];
|
| - }
|
| -
|
| - final List<T> _list;
|
| - int _pos;
|
| -}
|
| -
|
| -
|
| -class _ListJsUtil {
|
| - static int _listLength(List list) native {
|
| - return list.length;
|
| - }
|
| -
|
| - static List _newList(int len) native {
|
| - return new List(len);
|
| - }
|
| -
|
| - static void _throwIndexOutOfRangeException(int index) native {
|
| - throw new IndexOutOfRangeException(index);
|
| - }
|
| -}
|
|
|