Index: test/codegen/expect/dart/collection.js |
diff --git a/test/codegen/expect/dart/collection.js b/test/codegen/expect/dart/collection.js |
index 465acee6792dc34eb971fd2720b3bf2894a4b199..459e2a05116b508f704097760e301c8d1d6c0fe8 100644 |
--- a/test/codegen/expect/dart/collection.js |
+++ b/test/codegen/expect/dart/collection.js |
@@ -17,7 +17,7 @@ var collection; |
} |
return UnmodifiableListView; |
}); |
- let UnmodifiableListView = UnmodifiableListView$(dart.dynamic); |
+ dart.defineLazyClassGeneric(exports, 'UnmodifiableListView', {get: UnmodifiableListView$}); |
// Function _defaultEquals: (dynamic, dynamic) → bool |
function _defaultEquals(a, b) { |
return dart.equals(a, b); |
@@ -87,6 +87,261 @@ var collection; |
}); |
let HashMap = HashMap$(dart.dynamic, dart.dynamic); |
let _newSet = Symbol('_newSet'); |
+ let SetMixin$ = dart.generic(function(E) { |
+ class SetMixin extends core.Object { |
+ get isEmpty() { |
+ return this.length === 0; |
+ } |
+ get isNotEmpty() { |
+ return this.length !== 0; |
+ } |
+ clear() { |
+ this.removeAll(this.toList()); |
+ } |
+ addAll(elements) { |
+ for (let element of elements) |
+ this.add(element); |
+ } |
+ removeAll(elements) { |
+ for (let element of elements) |
+ this.remove(element); |
+ } |
+ retainAll(elements) { |
+ let toRemove = this.toSet(); |
+ for (let o of elements) { |
+ toRemove.remove(o); |
+ } |
+ this.removeAll(toRemove); |
+ } |
+ removeWhere(test) { |
+ let toRemove = new List.from([]); |
+ for (let element of this) { |
+ if (test(element)) |
+ toRemove.add(element); |
+ } |
+ this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); |
+ } |
+ retainWhere(test) { |
+ let toRemove = new List.from([]); |
+ for (let element of this) { |
+ if (!dart.notNull(test(element))) |
+ toRemove.add(element); |
+ } |
+ this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); |
+ } |
+ containsAll(other) { |
+ for (let o of other) { |
+ if (!dart.notNull(this.contains(o))) |
+ return false; |
+ } |
+ return true; |
+ } |
+ union(other) { |
+ return ((_) => { |
+ _.addAll(other); |
+ return _; |
+ }).bind(this)(this.toSet()); |
+ } |
+ intersection(other) { |
+ let result = this.toSet(); |
+ for (let element of this) { |
+ if (!dart.notNull(other.contains(element))) |
+ result.remove(element); |
+ } |
+ return result; |
+ } |
+ difference(other) { |
+ let result = this.toSet(); |
+ for (let element of this) { |
+ if (other.contains(element)) |
+ result.remove(element); |
+ } |
+ return result; |
+ } |
+ toList(opt$) { |
+ let growable = opt$.growable === void 0 ? true : opt$.growable; |
+ let result = growable ? ((_) => { |
+ _.length = this.length; |
+ return _; |
+ }).bind(this)(new core.List()) : new core.List(this.length); |
+ let i = 0; |
+ for (let element of this) |
+ result.set((($tmp) => i = dart.notNull($tmp) + 1, $tmp)(i), element); |
+ return result; |
+ } |
+ map(f) { |
+ return new _internal.EfficientLengthMappedIterable(this, f); |
+ } |
+ get single() { |
+ if (dart.notNull(this.length) > 1) |
+ throw _internal.IterableElementError.tooMany(); |
+ let it = this.iterator; |
+ if (!dart.notNull(it.moveNext())) |
+ throw _internal.IterableElementError.noElement(); |
+ let result = dart.as(it.current, E); |
+ return result; |
+ } |
+ toString() { |
+ return IterableBase.iterableToFullString(this, '{', '}'); |
+ } |
+ where(f) { |
+ return new _internal.WhereIterable(this, f); |
+ } |
+ expand(f) { |
+ return new _internal.ExpandIterable(this, f); |
+ } |
+ forEach(f) { |
+ for (let element of this) |
+ f(element); |
+ } |
+ reduce(combine) { |
+ let iterator = this.iterator; |
+ if (!dart.notNull(iterator.moveNext())) { |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ let value = iterator.current; |
+ while (iterator.moveNext()) { |
+ value = combine(value, iterator.current); |
+ } |
+ return value; |
+ } |
+ fold(initialValue, combine) { |
+ let value = initialValue; |
+ for (let element of this) |
+ value = combine(value, element); |
+ return value; |
+ } |
+ every(f) { |
+ for (let element of this) { |
+ if (!dart.notNull(f(element))) |
+ return false; |
+ } |
+ return true; |
+ } |
+ join(separator) { |
+ if (separator === void 0) |
+ separator = ""; |
+ let iterator = this.iterator; |
+ if (!dart.notNull(iterator.moveNext())) |
+ return ""; |
+ let buffer = new core.StringBuffer(); |
+ if (dart.notNull(separator === null) || dart.notNull(dart.equals(separator, ""))) { |
+ do { |
+ buffer.write(`${iterator.current}`); |
+ } while (iterator.moveNext()); |
+ } else { |
+ buffer.write(`${iterator.current}`); |
+ while (iterator.moveNext()) { |
+ buffer.write(separator); |
+ buffer.write(`${iterator.current}`); |
+ } |
+ } |
+ return buffer.toString(); |
+ } |
+ any(test) { |
+ for (let element of this) { |
+ if (test(element)) |
+ return true; |
+ } |
+ return false; |
+ } |
+ take(n) { |
+ return new _internal.TakeIterable(this, n); |
+ } |
+ takeWhile(test) { |
+ return new _internal.TakeWhileIterable(this, test); |
+ } |
+ skip(n) { |
+ return new _internal.SkipIterable(this, n); |
+ } |
+ skipWhile(test) { |
+ return new _internal.SkipWhileIterable(this, test); |
+ } |
+ get first() { |
+ let it = this.iterator; |
+ if (!dart.notNull(it.moveNext())) { |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ return dart.as(it.current, E); |
+ } |
+ get last() { |
+ let it = this.iterator; |
+ if (!dart.notNull(it.moveNext())) { |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ let result = null; |
+ do { |
+ result = dart.as(it.current, E); |
+ } while (it.moveNext()); |
+ return result; |
+ } |
+ firstWhere(test, opt$) { |
+ let orElse = opt$.orElse === void 0 ? null : opt$.orElse; |
+ for (let element of this) { |
+ if (test(element)) |
+ return element; |
+ } |
+ if (orElse !== null) |
+ return orElse(); |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ lastWhere(test, opt$) { |
+ let orElse = opt$.orElse === void 0 ? null : opt$.orElse; |
+ let result = null; |
+ let foundMatching = false; |
+ for (let element of this) { |
+ if (test(element)) { |
+ result = element; |
+ foundMatching = true; |
+ } |
+ } |
+ if (foundMatching) |
+ return result; |
+ if (orElse !== null) |
+ return orElse(); |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ singleWhere(test) { |
+ let result = null; |
+ let foundMatching = false; |
+ for (let element of this) { |
+ if (test(element)) { |
+ if (foundMatching) { |
+ throw _internal.IterableElementError.tooMany(); |
+ } |
+ result = element; |
+ foundMatching = true; |
+ } |
+ } |
+ if (foundMatching) |
+ return result; |
+ throw _internal.IterableElementError.noElement(); |
+ } |
+ elementAt(index) { |
+ if (!(typeof index == number)) |
+ throw new core.ArgumentError.notNull("index"); |
+ core.RangeError.checkNotNegative(index, "index"); |
+ let elementIndex = 0; |
+ for (let element of this) { |
+ if (index === elementIndex) |
+ return element; |
+ elementIndex = dart.notNull(elementIndex) + 1; |
+ } |
+ throw new core.RangeError.index(index, this, "index", null, elementIndex); |
+ } |
+ } |
+ return SetMixin; |
+ }); |
+ let SetMixin = SetMixin$(dart.dynamic); |
+ let SetBase$ = dart.generic(function(E) { |
+ class SetBase extends SetMixin$(E) { |
+ static setToString(set) { |
+ return IterableBase.iterableToFullString(set, '{', '}'); |
+ } |
+ } |
+ return SetBase; |
+ }); |
+ let SetBase = SetBase$(dart.dynamic); |
let _HashSetBase$ = dart.generic(function(E) { |
class _HashSetBase extends SetBase$(E) { |
difference(other) { |
@@ -1015,15 +1270,6 @@ var collection; |
return LinkedListEntry; |
}); |
let LinkedListEntry = LinkedListEntry$(dart.dynamic); |
- let ListBase$ = dart.generic(function(E) { |
- class ListBase extends dart.mixin(core.Object, ListMixin$(E)) { |
- static listToString(list) { |
- return IterableBase.iterableToFullString(list, '[', ']'); |
- } |
- } |
- return ListBase; |
- }); |
- let ListBase = ListBase$(dart.dynamic); |
let _filter = Symbol('_filter'); |
let ListMixin$ = dart.generic(function(E) { |
class ListMixin extends core.Object { |
@@ -1475,12 +1721,15 @@ var collection; |
return ListMixin; |
}); |
let ListMixin = ListMixin$(dart.dynamic); |
- let MapBase$ = dart.generic(function(K, V) { |
- class MapBase extends dart.mixin(MapMixin$(K, V)) { |
+ let ListBase$ = dart.generic(function(E) { |
+ class ListBase extends dart.mixin(core.Object, ListMixin$(E)) { |
+ static listToString(list) { |
+ return IterableBase.iterableToFullString(list, '[', ']'); |
+ } |
} |
- return MapBase; |
+ return ListBase; |
}); |
- let MapBase = MapBase$(dart.dynamic, dart.dynamic); |
+ let ListBase = ListBase$(dart.dynamic); |
let MapMixin$ = dart.generic(function(K, V) { |
class MapMixin extends core.Object { |
forEach(action) { |
@@ -1528,6 +1777,33 @@ var collection; |
return MapMixin; |
}); |
let MapMixin = MapMixin$(dart.dynamic, dart.dynamic); |
+ let MapBase$ = dart.generic(function(K, V) { |
+ class MapBase extends dart.mixin(MapMixin$(K, V)) { |
+ } |
+ return MapBase; |
+ }); |
+ let MapBase = MapBase$(dart.dynamic, dart.dynamic); |
+ let _UnmodifiableMapMixin$ = dart.generic(function(K, V) { |
+ class _UnmodifiableMapMixin extends core.Object { |
+ set(key, value) { |
+ throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
+ } |
+ addAll(other) { |
+ throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
+ } |
+ clear() { |
+ throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
+ } |
+ remove(key) { |
+ throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
+ } |
+ putIfAbsent(key, ifAbsent) { |
+ throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
+ } |
+ } |
+ return _UnmodifiableMapMixin; |
+ }); |
+ let _UnmodifiableMapMixin = _UnmodifiableMapMixin$(dart.dynamic, dart.dynamic); |
let UnmodifiableMapBase$ = dart.generic(function(K, V) { |
class UnmodifiableMapBase extends dart.mixin(_UnmodifiableMapMixin$(K, V)) { |
} |
@@ -1589,27 +1865,6 @@ var collection; |
return _MapBaseValueIterator; |
}); |
let _MapBaseValueIterator = _MapBaseValueIterator$(dart.dynamic); |
- let _UnmodifiableMapMixin$ = dart.generic(function(K, V) { |
- class _UnmodifiableMapMixin extends core.Object { |
- set(key, value) { |
- throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
- } |
- addAll(other) { |
- throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
- } |
- clear() { |
- throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
- } |
- remove(key) { |
- throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
- } |
- putIfAbsent(key, ifAbsent) { |
- throw new core.UnsupportedError("Cannot modify unmodifiable map"); |
- } |
- } |
- return _UnmodifiableMapMixin; |
- }); |
- let _UnmodifiableMapMixin = _UnmodifiableMapMixin$(dart.dynamic, dart.dynamic); |
let MapView$ = dart.generic(function(K, V) { |
class MapView extends core.Object { |
MapView(map) { |
@@ -2125,461 +2380,206 @@ var collection; |
} else { |
let preSpace = dart.notNull(addCount) - dart.notNull(endSpace); |
this[_table].setRange(this[_tail], dart.notNull(this[_tail]) + dart.notNull(endSpace), dart.as(list, core.Iterable$(E)), 0); |
- this[_table].setRange(0, preSpace, dart.as(list, core.Iterable$(E)), endSpace); |
- this[_tail] = preSpace; |
- } |
- } |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- } else { |
- for (let element of elements) |
- this[_add](element); |
- } |
- } |
- remove(object) { |
- for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1) { |
- let element = this[_table].get(i); |
- if (dart.equals(element, object)) { |
- this[_remove](i); |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- return true; |
- } |
- } |
- return false; |
- } |
- [_filterWhere](test, removeMatching) { |
- let index = this[_head]; |
- let modificationCount = this[_modificationCount]; |
- let i = this[_head]; |
- while (i !== this[_tail]) { |
- let element = this[_table].get(i); |
- let remove = core.identical(removeMatching, test(element)); |
- this[_checkModification](modificationCount); |
- if (remove) { |
- i = this[_remove](i); |
- modificationCount = this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- } else { |
- i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1; |
- } |
- } |
- } |
- removeWhere(test) { |
- this[_filterWhere](test, true); |
- } |
- retainWhere(test) { |
- this[_filterWhere](test, false); |
- } |
- clear() { |
- if (this[_head] !== this[_tail]) { |
- for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1) { |
- this[_table].set(i, null); |
- } |
- this[_head] = this[_tail] = 0; |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- } |
- } |
- toString() { |
- return IterableBase.iterableToFullString(this, "{", "}"); |
- } |
- addLast(element) { |
- this[_add](element); |
- } |
- addFirst(element) { |
- this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table].length) - 1; |
- this[_table].set(this[_head], element); |
- if (this[_head] === this[_tail]) |
- this[_grow](); |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- } |
- removeFirst() { |
- if (this[_head] === this[_tail]) |
- throw _internal.IterableElementError.noElement(); |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- let result = this[_table].get(this[_head]); |
- this[_table].set(this[_head], null); |
- this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table].length) - 1; |
- return result; |
- } |
- removeLast() { |
- if (this[_head] === this[_tail]) |
- throw _internal.IterableElementError.noElement(); |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table].length) - 1; |
- let result = this[_table].get(this[_tail]); |
- this[_table].set(this[_tail], null); |
- return result; |
- } |
- static [_isPowerOf2](number) { |
- return (dart.notNull(number) & dart.notNull(number) - 1) === 0; |
- } |
- static [_nextPowerOf2](number) { |
- dart.assert(dart.notNull(number) > 0); |
- number = (dart.notNull(number) << 1) - 1; |
- for (;;) { |
- let nextNumber = dart.notNull(number) & dart.notNull(number) - 1; |
- if (nextNumber === 0) |
- return number; |
- number = nextNumber; |
- } |
- } |
- [_checkModification](expectedModificationCount) { |
- if (expectedModificationCount !== this[_modificationCount]) { |
- throw new core.ConcurrentModificationError(this); |
- } |
- } |
- [_add](element) { |
- this[_table].set(this[_tail], element); |
- this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table].length) - 1; |
- if (this[_head] === this[_tail]) |
- this[_grow](); |
- this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
- } |
- [_remove](offset) { |
- let mask = dart.notNull(this[_table].length) - 1; |
- let startDistance = dart.notNull(offset) - dart.notNull(this[_head]) & dart.notNull(mask); |
- let endDistance = dart.notNull(this[_tail]) - dart.notNull(offset) & dart.notNull(mask); |
- if (dart.notNull(startDistance) < dart.notNull(endDistance)) { |
- let i = offset; |
- while (i !== this[_head]) { |
- let prevOffset = dart.notNull(i) - 1 & dart.notNull(mask); |
- this[_table].set(i, this[_table].get(prevOffset)); |
- i = prevOffset; |
- } |
- this[_table].set(this[_head], null); |
- this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(mask); |
- return dart.notNull(offset) + 1 & dart.notNull(mask); |
- } else { |
- this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(mask); |
- let i = offset; |
- while (i !== this[_tail]) { |
- let nextOffset = dart.notNull(i) + 1 & dart.notNull(mask); |
- this[_table].set(i, this[_table].get(nextOffset)); |
- i = nextOffset; |
- } |
- this[_table].set(this[_tail], null); |
- return offset; |
- } |
- } |
- [_grow]() { |
- let newTable = new core.List(dart.notNull(this[_table].length) * 2); |
- let split = dart.notNull(this[_table].length) - dart.notNull(this[_head]); |
- newTable.setRange(0, split, this[_table], this[_head]); |
- newTable.setRange(split, dart.notNull(split) + dart.notNull(this[_head]), this[_table], 0); |
- this[_head] = 0; |
- this[_tail] = this[_table].length; |
- this[_table] = newTable; |
- } |
- [_writeToList](target) { |
- dart.assert(dart.notNull(target.length) >= dart.notNull(this.length)); |
- if (dart.notNull(this[_head]) <= dart.notNull(this[_tail])) { |
- let length = dart.notNull(this[_tail]) - dart.notNull(this[_head]); |
- target.setRange(0, length, this[_table], this[_head]); |
- return length; |
- } else { |
- let firstPartSize = dart.notNull(this[_table].length) - dart.notNull(this[_head]); |
- target.setRange(0, firstPartSize, this[_table], this[_head]); |
- target.setRange(firstPartSize, dart.notNull(firstPartSize) + dart.notNull(this[_tail]), this[_table], 0); |
- return dart.notNull(this[_tail]) + dart.notNull(firstPartSize); |
- } |
- } |
- [_preGrow](newElementCount) { |
- dart.assert(dart.notNull(newElementCount) >= dart.notNull(this.length)); |
- newElementCount = dart.notNull(newElementCount) >> 1; |
- let newCapacity = _nextPowerOf2(newElementCount); |
- let newTable = new core.List(newCapacity); |
- this[_tail] = this[_writeToList](newTable); |
- this[_table] = newTable; |
- this[_head] = 0; |
- } |
- } |
- dart.defineNamedConstructor(ListQueue, 'from'); |
- ListQueue._INITIAL_CAPACITY = 8; |
- return ListQueue; |
- }); |
- let ListQueue = ListQueue$(dart.dynamic); |
- let _queue = Symbol('_queue'); |
- let _end = Symbol('_end'); |
- let _position = Symbol('_position'); |
- let _ListQueueIterator$ = dart.generic(function(E) { |
- class _ListQueueIterator extends core.Object { |
- _ListQueueIterator(queue) { |
- this[_queue] = queue; |
- this[_end] = queue[_tail]; |
- this[_modificationCount] = queue[_modificationCount]; |
- this[_position] = queue[_head]; |
- this[_current] = null; |
- } |
- get current() { |
- return this[_current]; |
- } |
- moveNext() { |
- this[_queue]._checkModification(this[_modificationCount]); |
- if (this[_position] === this[_end]) { |
- this[_current] = null; |
- return false; |
- } |
- this[_current] = dart.as(this[_queue][_table].get(this[_position]), E); |
- this[_position] = dart.notNull(this[_position]) + 1 & dart.notNull(this[_queue][_table].length) - 1; |
- return true; |
- } |
- } |
- return _ListQueueIterator; |
- }); |
- let _ListQueueIterator = _ListQueueIterator$(dart.dynamic); |
- let SetMixin$ = dart.generic(function(E) { |
- class SetMixin extends core.Object { |
- get isEmpty() { |
- return this.length === 0; |
- } |
- get isNotEmpty() { |
- return this.length !== 0; |
- } |
- clear() { |
- this.removeAll(this.toList()); |
- } |
- addAll(elements) { |
- for (let element of elements) |
- this.add(element); |
- } |
- removeAll(elements) { |
- for (let element of elements) |
- this.remove(element); |
- } |
- retainAll(elements) { |
- let toRemove = this.toSet(); |
- for (let o of elements) { |
- toRemove.remove(o); |
- } |
- this.removeAll(toRemove); |
- } |
- removeWhere(test) { |
- let toRemove = new List.from([]); |
- for (let element of this) { |
- if (test(element)) |
- toRemove.add(element); |
- } |
- this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); |
- } |
- retainWhere(test) { |
- let toRemove = new List.from([]); |
- for (let element of this) { |
- if (!dart.notNull(test(element))) |
- toRemove.add(element); |
- } |
- this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); |
- } |
- containsAll(other) { |
- for (let o of other) { |
- if (!dart.notNull(this.contains(o))) |
- return false; |
- } |
- return true; |
- } |
- union(other) { |
- return ((_) => { |
- _.addAll(other); |
- return _; |
- }).bind(this)(this.toSet()); |
- } |
- intersection(other) { |
- let result = this.toSet(); |
- for (let element of this) { |
- if (!dart.notNull(other.contains(element))) |
- result.remove(element); |
- } |
- return result; |
- } |
- difference(other) { |
- let result = this.toSet(); |
- for (let element of this) { |
- if (other.contains(element)) |
- result.remove(element); |
- } |
- return result; |
- } |
- toList(opt$) { |
- let growable = opt$.growable === void 0 ? true : opt$.growable; |
- let result = growable ? ((_) => { |
- _.length = this.length; |
- return _; |
- }).bind(this)(new core.List()) : new core.List(this.length); |
- let i = 0; |
- for (let element of this) |
- result.set((($tmp) => i = dart.notNull($tmp) + 1, $tmp)(i), element); |
- return result; |
- } |
- map(f) { |
- return new _internal.EfficientLengthMappedIterable(this, f); |
- } |
- get single() { |
- if (dart.notNull(this.length) > 1) |
- throw _internal.IterableElementError.tooMany(); |
- let it = this.iterator; |
- if (!dart.notNull(it.moveNext())) |
- throw _internal.IterableElementError.noElement(); |
- let result = dart.as(it.current, E); |
- return result; |
- } |
- toString() { |
- return IterableBase.iterableToFullString(this, '{', '}'); |
- } |
- where(f) { |
- return new _internal.WhereIterable(this, f); |
- } |
- expand(f) { |
- return new _internal.ExpandIterable(this, f); |
- } |
- forEach(f) { |
- for (let element of this) |
- f(element); |
- } |
- reduce(combine) { |
- let iterator = this.iterator; |
- if (!dart.notNull(iterator.moveNext())) { |
- throw _internal.IterableElementError.noElement(); |
- } |
- let value = iterator.current; |
- while (iterator.moveNext()) { |
- value = combine(value, iterator.current); |
- } |
- return value; |
- } |
- fold(initialValue, combine) { |
- let value = initialValue; |
- for (let element of this) |
- value = combine(value, element); |
- return value; |
- } |
- every(f) { |
- for (let element of this) { |
- if (!dart.notNull(f(element))) |
- return false; |
- } |
- return true; |
- } |
- join(separator) { |
- if (separator === void 0) |
- separator = ""; |
- let iterator = this.iterator; |
- if (!dart.notNull(iterator.moveNext())) |
- return ""; |
- let buffer = new core.StringBuffer(); |
- if (dart.notNull(separator === null) || dart.notNull(dart.equals(separator, ""))) { |
- do { |
- buffer.write(`${iterator.current}`); |
- } while (iterator.moveNext()); |
- } else { |
- buffer.write(`${iterator.current}`); |
- while (iterator.moveNext()) { |
- buffer.write(separator); |
- buffer.write(`${iterator.current}`); |
+ this[_table].setRange(0, preSpace, dart.as(list, core.Iterable$(E)), endSpace); |
+ this[_tail] = preSpace; |
+ } |
} |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ } else { |
+ for (let element of elements) |
+ this[_add](element); |
} |
- return buffer.toString(); |
} |
- any(test) { |
- for (let element of this) { |
- if (test(element)) |
+ remove(object) { |
+ for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1) { |
+ let element = this[_table].get(i); |
+ if (dart.equals(element, object)) { |
+ this[_remove](i); |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
return true; |
+ } |
} |
return false; |
} |
- take(n) { |
- return new _internal.TakeIterable(this, n); |
+ [_filterWhere](test, removeMatching) { |
+ let index = this[_head]; |
+ let modificationCount = this[_modificationCount]; |
+ let i = this[_head]; |
+ while (i !== this[_tail]) { |
+ let element = this[_table].get(i); |
+ let remove = core.identical(removeMatching, test(element)); |
+ this[_checkModification](modificationCount); |
+ if (remove) { |
+ i = this[_remove](i); |
+ modificationCount = this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ } else { |
+ i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1; |
+ } |
+ } |
} |
- takeWhile(test) { |
- return new _internal.TakeWhileIterable(this, test); |
+ removeWhere(test) { |
+ this[_filterWhere](test, true); |
} |
- skip(n) { |
- return new _internal.SkipIterable(this, n); |
+ retainWhere(test) { |
+ this[_filterWhere](test, false); |
} |
- skipWhile(test) { |
- return new _internal.SkipWhileIterable(this, test); |
+ clear() { |
+ if (this[_head] !== this[_tail]) { |
+ for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1) { |
+ this[_table].set(i, null); |
+ } |
+ this[_head] = this[_tail] = 0; |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ } |
} |
- get first() { |
- let it = this.iterator; |
- if (!dart.notNull(it.moveNext())) { |
+ toString() { |
+ return IterableBase.iterableToFullString(this, "{", "}"); |
+ } |
+ addLast(element) { |
+ this[_add](element); |
+ } |
+ addFirst(element) { |
+ this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table].length) - 1; |
+ this[_table].set(this[_head], element); |
+ if (this[_head] === this[_tail]) |
+ this[_grow](); |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ } |
+ removeFirst() { |
+ if (this[_head] === this[_tail]) |
throw _internal.IterableElementError.noElement(); |
- } |
- return dart.as(it.current, E); |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ let result = this[_table].get(this[_head]); |
+ this[_table].set(this[_head], null); |
+ this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table].length) - 1; |
+ return result; |
} |
- get last() { |
- let it = this.iterator; |
- if (!dart.notNull(it.moveNext())) { |
+ removeLast() { |
+ if (this[_head] === this[_tail]) |
throw _internal.IterableElementError.noElement(); |
- } |
- let result = null; |
- do { |
- result = dart.as(it.current, E); |
- } while (it.moveNext()); |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table].length) - 1; |
+ let result = this[_table].get(this[_tail]); |
+ this[_table].set(this[_tail], null); |
return result; |
} |
- firstWhere(test, opt$) { |
- let orElse = opt$.orElse === void 0 ? null : opt$.orElse; |
- for (let element of this) { |
- if (test(element)) |
- return element; |
+ static [_isPowerOf2](number) { |
+ return (dart.notNull(number) & dart.notNull(number) - 1) === 0; |
+ } |
+ static [_nextPowerOf2](number) { |
+ dart.assert(dart.notNull(number) > 0); |
+ number = (dart.notNull(number) << 1) - 1; |
+ for (;;) { |
+ let nextNumber = dart.notNull(number) & dart.notNull(number) - 1; |
+ if (nextNumber === 0) |
+ return number; |
+ number = nextNumber; |
} |
- if (orElse !== null) |
- return orElse(); |
- throw _internal.IterableElementError.noElement(); |
} |
- lastWhere(test, opt$) { |
- let orElse = opt$.orElse === void 0 ? null : opt$.orElse; |
- let result = null; |
- let foundMatching = false; |
- for (let element of this) { |
- if (test(element)) { |
- result = element; |
- foundMatching = true; |
- } |
+ [_checkModification](expectedModificationCount) { |
+ if (expectedModificationCount !== this[_modificationCount]) { |
+ throw new core.ConcurrentModificationError(this); |
} |
- if (foundMatching) |
- return result; |
- if (orElse !== null) |
- return orElse(); |
- throw _internal.IterableElementError.noElement(); |
} |
- singleWhere(test) { |
- let result = null; |
- let foundMatching = false; |
- for (let element of this) { |
- if (test(element)) { |
- if (foundMatching) { |
- throw _internal.IterableElementError.tooMany(); |
- } |
- result = element; |
- foundMatching = true; |
+ [_add](element) { |
+ this[_table].set(this[_tail], element); |
+ this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table].length) - 1; |
+ if (this[_head] === this[_tail]) |
+ this[_grow](); |
+ this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; |
+ } |
+ [_remove](offset) { |
+ let mask = dart.notNull(this[_table].length) - 1; |
+ let startDistance = dart.notNull(offset) - dart.notNull(this[_head]) & dart.notNull(mask); |
+ let endDistance = dart.notNull(this[_tail]) - dart.notNull(offset) & dart.notNull(mask); |
+ if (dart.notNull(startDistance) < dart.notNull(endDistance)) { |
+ let i = offset; |
+ while (i !== this[_head]) { |
+ let prevOffset = dart.notNull(i) - 1 & dart.notNull(mask); |
+ this[_table].set(i, this[_table].get(prevOffset)); |
+ i = prevOffset; |
+ } |
+ this[_table].set(this[_head], null); |
+ this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(mask); |
+ return dart.notNull(offset) + 1 & dart.notNull(mask); |
+ } else { |
+ this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(mask); |
+ let i = offset; |
+ while (i !== this[_tail]) { |
+ let nextOffset = dart.notNull(i) + 1 & dart.notNull(mask); |
+ this[_table].set(i, this[_table].get(nextOffset)); |
+ i = nextOffset; |
} |
+ this[_table].set(this[_tail], null); |
+ return offset; |
} |
- if (foundMatching) |
- return result; |
- throw _internal.IterableElementError.noElement(); |
} |
- elementAt(index) { |
- if (!(typeof index == number)) |
- throw new core.ArgumentError.notNull("index"); |
- core.RangeError.checkNotNegative(index, "index"); |
- let elementIndex = 0; |
- for (let element of this) { |
- if (index === elementIndex) |
- return element; |
- elementIndex = dart.notNull(elementIndex) + 1; |
+ [_grow]() { |
+ let newTable = new core.List(dart.notNull(this[_table].length) * 2); |
+ let split = dart.notNull(this[_table].length) - dart.notNull(this[_head]); |
+ newTable.setRange(0, split, this[_table], this[_head]); |
+ newTable.setRange(split, dart.notNull(split) + dart.notNull(this[_head]), this[_table], 0); |
+ this[_head] = 0; |
+ this[_tail] = this[_table].length; |
+ this[_table] = newTable; |
+ } |
+ [_writeToList](target) { |
+ dart.assert(dart.notNull(target.length) >= dart.notNull(this.length)); |
+ if (dart.notNull(this[_head]) <= dart.notNull(this[_tail])) { |
+ let length = dart.notNull(this[_tail]) - dart.notNull(this[_head]); |
+ target.setRange(0, length, this[_table], this[_head]); |
+ return length; |
+ } else { |
+ let firstPartSize = dart.notNull(this[_table].length) - dart.notNull(this[_head]); |
+ target.setRange(0, firstPartSize, this[_table], this[_head]); |
+ target.setRange(firstPartSize, dart.notNull(firstPartSize) + dart.notNull(this[_tail]), this[_table], 0); |
+ return dart.notNull(this[_tail]) + dart.notNull(firstPartSize); |
} |
- throw new core.RangeError.index(index, this, "index", null, elementIndex); |
+ } |
+ [_preGrow](newElementCount) { |
+ dart.assert(dart.notNull(newElementCount) >= dart.notNull(this.length)); |
+ newElementCount = dart.notNull(newElementCount) >> 1; |
+ let newCapacity = _nextPowerOf2(newElementCount); |
+ let newTable = new core.List(newCapacity); |
+ this[_tail] = this[_writeToList](newTable); |
+ this[_table] = newTable; |
+ this[_head] = 0; |
} |
} |
- return SetMixin; |
+ dart.defineNamedConstructor(ListQueue, 'from'); |
+ ListQueue._INITIAL_CAPACITY = 8; |
+ return ListQueue; |
}); |
- let SetMixin = SetMixin$(dart.dynamic); |
- let SetBase$ = dart.generic(function(E) { |
- class SetBase extends SetMixin$(E) { |
- static setToString(set) { |
- return IterableBase.iterableToFullString(set, '{', '}'); |
+ let ListQueue = ListQueue$(dart.dynamic); |
+ let _queue = Symbol('_queue'); |
+ let _end = Symbol('_end'); |
+ let _position = Symbol('_position'); |
+ let _ListQueueIterator$ = dart.generic(function(E) { |
+ class _ListQueueIterator extends core.Object { |
+ _ListQueueIterator(queue) { |
+ this[_queue] = queue; |
+ this[_end] = queue[_tail]; |
+ this[_modificationCount] = queue[_modificationCount]; |
+ this[_position] = queue[_head]; |
+ this[_current] = null; |
+ } |
+ get current() { |
+ return this[_current]; |
+ } |
+ moveNext() { |
+ this[_queue]._checkModification(this[_modificationCount]); |
+ if (this[_position] === this[_end]) { |
+ this[_current] = null; |
+ return false; |
+ } |
+ this[_current] = dart.as(this[_queue][_table].get(this[_position]), E); |
+ this[_position] = dart.notNull(this[_position]) + 1 & dart.notNull(this[_queue][_table].length) - 1; |
+ return true; |
} |
} |
- return SetBase; |
+ return _ListQueueIterator; |
}); |
- let SetBase = SetBase$(dart.dynamic); |
+ let _ListQueueIterator = _ListQueueIterator$(dart.dynamic); |
let _SplayTreeNode$ = dart.generic(function(K) { |
class _SplayTreeNode extends core.Object { |
_SplayTreeNode(key) { |
@@ -4835,6 +4835,10 @@ var collection; |
exports.UnmodifiableListView$ = UnmodifiableListView$; |
exports.HashMap = HashMap; |
exports.HashMap$ = HashMap$; |
+ exports.SetBase = SetBase; |
+ exports.SetBase$ = SetBase$; |
+ exports.SetMixin = SetMixin; |
+ exports.SetMixin$ = SetMixin$; |
exports.HashSet = HashSet; |
exports.HashSet$ = HashSet$; |
exports.IterableMixin = IterableMixin; |
@@ -4874,10 +4878,6 @@ var collection; |
exports.DoubleLinkedQueue$ = DoubleLinkedQueue$; |
exports.ListQueue = ListQueue; |
exports.ListQueue$ = ListQueue$; |
- exports.SetMixin = SetMixin; |
- exports.SetMixin$ = SetMixin$; |
- exports.SetBase = SetBase; |
- exports.SetBase$ = SetBase$; |
exports.SplayTreeMap = SplayTreeMap; |
exports.SplayTreeMap$ = SplayTreeMap$; |
exports.SplayTreeSet = SplayTreeSet; |