| Index: runtime/lib/array.dart
|
| ===================================================================
|
| --- runtime/lib/array.dart (revision 41737)
|
| +++ runtime/lib/array.dart (working copy)
|
| @@ -4,7 +4,7 @@
|
|
|
|
|
| // TODO(srdjan): Use shared array implementation.
|
| -class _List<E> implements List<E> {
|
| +class _List<E> extends FixedLengthListBase<E> {
|
|
|
| factory _List(length) native "List_allocate";
|
|
|
| @@ -12,10 +12,6 @@
|
|
|
| void operator []=(int index, E value) native "List_setIndexed";
|
|
|
| - String toString() {
|
| - return ListBase.listToString(this);
|
| - }
|
| -
|
| int get length native "List_getLength";
|
|
|
| List _slice(int start, int count, bool needsTypeArgument) {
|
| @@ -34,38 +30,6 @@
|
| List _sliceInternal(int start, int count, bool needsTypeArgument)
|
| native "List_slice";
|
|
|
| - void insert(int index, E element) {
|
| - throw NonGrowableListError.add();
|
| - }
|
| -
|
| - void insertAll(int index, Iterable<E> iterable) {
|
| - throw NonGrowableListError.add();
|
| - }
|
| -
|
| - void setAll(int index, Iterable<E> iterable) {
|
| - IterableMixinWorkaround.setAllList(this, index, iterable);
|
| - }
|
| -
|
| - E removeAt(int index) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - bool remove(Object element) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - void removeWhere(bool test(E element)) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - void retainWhere(bool test(E element)) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - Iterable<E> getRange(int start, [int end]) {
|
| - return new IterableMixinWorkaround<E>().getRangeList(this, start, end);
|
| - }
|
| -
|
| // List interface.
|
| void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
|
| if (start < 0 || start > this.length) {
|
| @@ -95,18 +59,6 @@
|
| }
|
| }
|
|
|
| - void removeRange(int start, int end) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - void replaceRange(int start, int end, Iterable<E> iterable) {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - void fillRange(int start, int end, [E fillValue]) {
|
| - IterableMixinWorkaround.fillRangeList(this, start, end, fillValue);
|
| - }
|
| -
|
| List<E> sublist(int start, [int end]) {
|
| Lists.indicesCheck(this, start, end);
|
| if (end == null) end = this.length;
|
| @@ -119,10 +71,6 @@
|
|
|
| // Iterable interface.
|
|
|
| - bool contains(Object element) {
|
| - return IterableMixinWorkaround.contains(this, element);
|
| - }
|
| -
|
| void forEach(f(E element)) {
|
| final length = this.length;
|
| for (int i = 0; i < length; i++) {
|
| @@ -130,120 +78,10 @@
|
| }
|
| }
|
|
|
| - String join([String separator = ""]) {
|
| - return IterableMixinWorkaround.joinList(this, separator);
|
| - }
|
| -
|
| - Iterable map(f(E element)) {
|
| - return IterableMixinWorkaround.mapList(this, f);
|
| - }
|
| -
|
| - E reduce(E combine(E value, E element)) {
|
| - return IterableMixinWorkaround.reduce(this, combine);
|
| - }
|
| -
|
| - fold(initialValue, combine(previousValue, E element)) {
|
| - return IterableMixinWorkaround.fold(this, initialValue, combine);
|
| - }
|
| -
|
| - Iterable<E> where(bool f(E element)) {
|
| - return new IterableMixinWorkaround<E>().where(this, f);
|
| - }
|
| -
|
| - Iterable expand(Iterable f(E element)) {
|
| - return IterableMixinWorkaround.expand(this, f);
|
| - }
|
| -
|
| - Iterable<E> take(int n) {
|
| - return new IterableMixinWorkaround<E>().takeList(this, n);
|
| - }
|
| -
|
| - Iterable<E> takeWhile(bool test(E value)) {
|
| - return new IterableMixinWorkaround<E>().takeWhile(this, test);
|
| - }
|
| -
|
| - Iterable<E> skip(int n) {
|
| - return new IterableMixinWorkaround<E>().skipList(this, n);
|
| - }
|
| -
|
| - Iterable<E> skipWhile(bool test(E value)) {
|
| - return new IterableMixinWorkaround<E>().skipWhile(this, test);
|
| - }
|
| -
|
| - bool every(bool f(E element)) {
|
| - return IterableMixinWorkaround.every(this, f);
|
| - }
|
| -
|
| - bool any(bool f(E element)) {
|
| - return IterableMixinWorkaround.any(this, f);
|
| - }
|
| -
|
| - E firstWhere(bool test(E value), {E orElse()}) {
|
| - return IterableMixinWorkaround.firstWhere(this, test, orElse);
|
| - }
|
| -
|
| - E lastWhere(bool test(E value), {E orElse()}) {
|
| - return IterableMixinWorkaround.lastWhereList(this, test, orElse);
|
| - }
|
| -
|
| - E singleWhere(bool test(E value)) {
|
| - return IterableMixinWorkaround.singleWhere(this, test);
|
| - }
|
| -
|
| - E elementAt(int index) {
|
| - return this[index];
|
| - }
|
| -
|
| - bool get isEmpty {
|
| - return this.length == 0;
|
| - }
|
| -
|
| - bool get isNotEmpty => !isEmpty;
|
| -
|
| - Iterable<E> get reversed =>
|
| - new IterableMixinWorkaround<E>().reversedList(this);
|
| -
|
| - void sort([int compare(E a, E b)]) {
|
| - IterableMixinWorkaround.sortList(this, compare);
|
| - }
|
| -
|
| - void shuffle([Random random]) {
|
| - IterableMixinWorkaround.shuffleList(this, random);
|
| - }
|
| -
|
| - int indexOf(Object element, [int start = 0]) {
|
| - return Lists.indexOf(this, element, start, this.length);
|
| - }
|
| -
|
| - int lastIndexOf(Object element, [int start = null]) {
|
| - if (start == null) start = length - 1;
|
| - return Lists.lastIndexOf(this, element, start);
|
| - }
|
| -
|
| Iterator<E> get iterator {
|
| return new _FixedSizeArrayIterator<E>(this);
|
| }
|
|
|
| - void add(E element) {
|
| - throw NonGrowableListError.add();
|
| - }
|
| -
|
| - void addAll(Iterable<E> iterable) {
|
| - throw NonGrowableListError.add();
|
| - }
|
| -
|
| - void clear() {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| - void set length(int length) {
|
| - throw NonGrowableListError.length();
|
| - }
|
| -
|
| - E removeLast() {
|
| - throw NonGrowableListError.remove();
|
| - }
|
| -
|
| E get first {
|
| if (length > 0) return this[0];
|
| throw IterableElementError.noElement();
|
| @@ -273,14 +111,6 @@
|
| // _GrowableList.withData must not be called with empty list.
|
| return growable ? <E>[] : new List<E>(0);
|
| }
|
| -
|
| - Set<E> toSet() {
|
| - return new Set<E>.from(this);
|
| - }
|
| -
|
| - Map<int, E> asMap() {
|
| - return new IterableMixinWorkaround<E>().asMapList(this);
|
| - }
|
| }
|
|
|
|
|
| @@ -291,7 +121,7 @@
|
| // classes (and inline cache misses) versus a field in the native
|
| // implementation (checks when modifying). We should keep watching
|
| // the inline cache misses.
|
| -class _ImmutableList<E> implements List<E> {
|
| +class _ImmutableList<E> extends UnmodifiableListBase<E> {
|
|
|
| factory _ImmutableList._uninstantiable() {
|
| throw new UnsupportedError(
|
| @@ -303,60 +133,8 @@
|
|
|
| E operator [](int index) native "List_getIndexed";
|
|
|
| - void operator []=(int index, E value) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| int get length native "List_getLength";
|
|
|
| - void insert(int index, E element) {
|
| - throw UnmodifiableListError.add();
|
| - }
|
| -
|
| - void insertAll(int index, Iterable<E> iterable) {
|
| - throw UnmodifiableListError.add();
|
| - }
|
| -
|
| - void setAll(int index, Iterable<E> iterable) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - E removeAt(int index) {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - bool remove(Object element) {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - void removeWhere(bool test(E element)) {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - void retainWhere(bool test(E element)) {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - void copyFrom(List src, int srcStart, int dstStart, int count) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - void removeRange(int start, int end) {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - void fillRange(int start, int end, [E fillValue]) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - void replaceRange(int start, int end, Iterable<E> iterable) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| List<E> sublist(int start, [int end]) {
|
| Lists.indicesCheck(this, start, end);
|
| if (end == null) end = this.length;
|
| @@ -371,16 +149,8 @@
|
| return result;
|
| }
|
|
|
| - Iterable<E> getRange(int start, int end) {
|
| - return new IterableMixinWorkaround<E>().getRangeList(this, start, end);
|
| - }
|
| -
|
| // Collection interface.
|
|
|
| - bool contains(Object element) {
|
| - return IterableMixinWorkaround.contains(this, element);
|
| - }
|
| -
|
| void forEach(f(E element)) {
|
| final length = this.length;
|
| for (int i = 0; i < length; i++) {
|
| @@ -388,124 +158,10 @@
|
| }
|
| }
|
|
|
| - Iterable map(f(E element)) {
|
| - return IterableMixinWorkaround.mapList(this, f);
|
| - }
|
| -
|
| - String join([String separator = ""]) {
|
| - return IterableMixinWorkaround.joinList(this, separator);
|
| - }
|
| -
|
| - E reduce(E combine(E value, E element)) {
|
| - return IterableMixinWorkaround.reduce(this, combine);
|
| - }
|
| -
|
| - fold(initialValue, combine(previousValue, E element)) {
|
| - return IterableMixinWorkaround.fold(this, initialValue, combine);
|
| - }
|
| -
|
| - Iterable<E> where(bool f(E element)) {
|
| - return new IterableMixinWorkaround<E>().where(this, f);
|
| - }
|
| -
|
| - Iterable expand(Iterable f(E element)) {
|
| - return IterableMixinWorkaround.expand(this, f);
|
| - }
|
| -
|
| - Iterable<E> take(int n) {
|
| - return new IterableMixinWorkaround<E>().takeList(this, n);
|
| - }
|
| -
|
| - Iterable<E> takeWhile(bool test(E value)) {
|
| - return new IterableMixinWorkaround<E>().takeWhile(this, test);
|
| - }
|
| -
|
| - Iterable<E> skip(int n) {
|
| - return new IterableMixinWorkaround<E>().skipList(this, n);
|
| - }
|
| -
|
| - Iterable<E> skipWhile(bool test(E value)) {
|
| - return new IterableMixinWorkaround<E>().skipWhile(this, test);
|
| - }
|
| -
|
| - bool every(bool f(E element)) {
|
| - return IterableMixinWorkaround.every(this, f);
|
| - }
|
| -
|
| - bool any(bool f(E element)) {
|
| - return IterableMixinWorkaround.any(this, f);
|
| - }
|
| -
|
| - E firstWhere(bool test(E value), {E orElse()}) {
|
| - return IterableMixinWorkaround.firstWhere(this, test, orElse);
|
| - }
|
| -
|
| - E lastWhere(bool test(E value), {E orElse()}) {
|
| - return IterableMixinWorkaround.lastWhereList(this, test, orElse);
|
| - }
|
| -
|
| - E singleWhere(bool test(E value)) {
|
| - return IterableMixinWorkaround.singleWhere(this, test);
|
| - }
|
| -
|
| - E elementAt(int index) {
|
| - return this[index];
|
| - }
|
| -
|
| - bool get isEmpty {
|
| - return this.length == 0;
|
| - }
|
| -
|
| - bool get isNotEmpty => !isEmpty;
|
| -
|
| - Iterable<E> get reversed =>
|
| - new IterableMixinWorkaround<E>().reversedList(this);
|
| -
|
| - void sort([int compare(E a, E b)]) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - void shuffle([Random random]) {
|
| - throw UnmodifiableListError.change();
|
| - }
|
| -
|
| - String toString() {
|
| - return ListBase.listToString(this);
|
| - }
|
| -
|
| - int indexOf(Object element, [int start = 0]) {
|
| - return Lists.indexOf(this, element, start, this.length);
|
| - }
|
| -
|
| - int lastIndexOf(Object element, [int start = null]) {
|
| - if (start == null) start = length - 1;
|
| - return Lists.lastIndexOf(this, element, start);
|
| - }
|
| -
|
| Iterator<E> get iterator {
|
| return new _FixedSizeArrayIterator<E>(this);
|
| }
|
|
|
| - void add(E element) {
|
| - throw UnmodifiableListError.add();
|
| - }
|
| -
|
| - void addAll(Iterable<E> elements) {
|
| - throw UnmodifiableListError.add();
|
| - }
|
| -
|
| - void clear() {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| - void set length(int length) {
|
| - throw UnmodifiableListError.length();
|
| - }
|
| -
|
| - E removeLast() {
|
| - throw UnmodifiableListError.remove();
|
| - }
|
| -
|
| E get first {
|
| if (length > 0) return this[0];
|
| throw IterableElementError.noElement();
|
| @@ -536,14 +192,6 @@
|
| }
|
| return growable ? <E>[] : new _List<E>(0);
|
| }
|
| -
|
| - Set<E> toSet() {
|
| - return new Set<E>.from(this);
|
| - }
|
| -
|
| - Map<int, E> asMap() {
|
| - return new IterableMixinWorkaround<E>().asMapList(this);
|
| - }
|
| }
|
|
|
|
|
|
|