| Index: lib/runtime/dart_sdk.js
|
| diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
|
| index 7bebddbe1f53ac6ef51e643b016676f83af01784..6fa4889a5d9981db9943f5ef46390fe71381153e 100644
|
| --- a/lib/runtime/dart_sdk.js
|
| +++ b/lib/runtime/dart_sdk.js
|
| @@ -21573,33 +21573,29 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| });
|
| collection.LinkedHashSet = collection.LinkedHashSet$();
|
| const _modificationCount = Symbol('_modificationCount');
|
| - const _insertAfter = Symbol('_insertAfter');
|
| + const _insertBefore$ = Symbol('_insertBefore');
|
| const _list = Symbol('_list');
|
| const _unlink$ = Symbol('_unlink');
|
| collection.LinkedList$ = dart.generic(E => {
|
| - class LinkedList extends collection.IterableBase$(E) {
|
| + class LinkedList extends core.Iterable$(E) {
|
| LinkedList() {
|
| this[_modificationCount] = 0;
|
| this[_length$0] = 0;
|
| - this[_next$] = null;
|
| - this[_previous$] = null;
|
| - super.IterableBase();
|
| - this[_next$] = this[_previous$] = this;
|
| + this[_first] = null;
|
| + super.Iterable();
|
| }
|
| addFirst(entry) {
|
| dart.as(entry, E);
|
| - this[_insertAfter](this, entry);
|
| + this[_insertBefore$](this[_first], entry, {updateFirst: true});
|
| + this[_first] = entry;
|
| }
|
| add(entry) {
|
| dart.as(entry, E);
|
| - this[_insertAfter](this[_previous$], entry);
|
| + this[_insertBefore$](this[_first], entry, {updateFirst: false});
|
| }
|
| addAll(entries) {
|
| dart.as(entries, core.Iterable$(E));
|
| - entries[dartx.forEach](dart.fn(entry => {
|
| - dart.as(entry, E);
|
| - return this[_insertAfter](this[_previous$], entry);
|
| - }, dart.void, [E]));
|
| + entries[dartx.forEach](dart.bind(this, 'add'));
|
| }
|
| remove(entry) {
|
| dart.as(entry, E);
|
| @@ -21615,76 +21611,94 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| clear() {
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| - let next = this[_next$];
|
| - while (!core.identical(next, this)) {
|
| - let entry = dart.as(next, E);
|
| + if (dart.notNull(this.isEmpty)) return;
|
| + let next = this[_first];
|
| + do {
|
| + let entry = next;
|
| next = entry[_next$];
|
| entry[_next$] = entry[_previous$] = entry[_list] = null;
|
| - }
|
| - this[_next$] = this[_previous$] = this;
|
| + } while (!core.identical(next, this[_first]));
|
| + this[_first] = null;
|
| this[_length$0] = 0;
|
| }
|
| get first() {
|
| - if (core.identical(this[_next$], this)) {
|
| + if (dart.notNull(this.isEmpty)) {
|
| dart.throw(new core.StateError('No such element'));
|
| }
|
| - return dart.as(this[_next$], E);
|
| + return this[_first];
|
| }
|
| get last() {
|
| - if (core.identical(this[_previous$], this)) {
|
| + if (dart.notNull(this.isEmpty)) {
|
| dart.throw(new core.StateError('No such element'));
|
| }
|
| - return dart.as(this[_previous$], E);
|
| + return this[_first][_previous$];
|
| }
|
| get single() {
|
| - if (core.identical(this[_previous$], this)) {
|
| + if (dart.notNull(this.isEmpty)) {
|
| dart.throw(new core.StateError('No such element'));
|
| }
|
| - if (!core.identical(this[_previous$], this[_next$])) {
|
| + if (dart.notNull(this[_length$0]) > 1) {
|
| dart.throw(new core.StateError('Too many elements'));
|
| }
|
| - return dart.as(this[_next$], E);
|
| + return this[_first];
|
| }
|
| forEach(action) {
|
| dart.as(action, dart.functionType(dart.void, [E]));
|
| let modificationCount = this[_modificationCount];
|
| - let current = this[_next$];
|
| - while (!core.identical(current, this)) {
|
| - action(dart.as(current, E));
|
| + if (dart.notNull(this.isEmpty)) return;
|
| + let current = this[_first];
|
| + do {
|
| + action(current);
|
| if (modificationCount != this[_modificationCount]) {
|
| dart.throw(new core.ConcurrentModificationError(this));
|
| }
|
| current = current[_next$];
|
| - }
|
| + } while (!core.identical(current, this[_first]));
|
| }
|
| get isEmpty() {
|
| return this[_length$0] == 0;
|
| }
|
| - [_insertAfter](entry, newEntry) {
|
| + [_insertBefore$](entry, newEntry, opts) {
|
| + dart.as(entry, E);
|
| dart.as(newEntry, E);
|
| + let updateFirst = opts && 'updateFirst' in opts ? opts.updateFirst : null;
|
| if (newEntry.list != null) {
|
| dart.throw(new core.StateError('LinkedListEntry is already in a LinkedList'));
|
| }
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| newEntry[_list] = this;
|
| - let predecessor = entry;
|
| - let successor = entry[_next$];
|
| - successor[_previous$] = newEntry;
|
| + if (dart.notNull(this.isEmpty)) {
|
| + dart.assert(entry == null);
|
| + newEntry[_previous$] = newEntry[_next$] = newEntry;
|
| + this[_first] = newEntry;
|
| + this[_length$0] = dart.notNull(this[_length$0]) + 1;
|
| + return;
|
| + }
|
| + let predecessor = entry[_previous$];
|
| + let successor = entry;
|
| newEntry[_previous$] = predecessor;
|
| newEntry[_next$] = successor;
|
| predecessor[_next$] = newEntry;
|
| + successor[_previous$] = newEntry;
|
| + if (dart.notNull(updateFirst) && core.identical(entry, this[_first])) {
|
| + this[_first] = newEntry;
|
| + }
|
| this[_length$0] = dart.notNull(this[_length$0]) + 1;
|
| }
|
| [_unlink$](entry) {
|
| - dart.as(entry, collection.LinkedListEntry$(E));
|
| + dart.as(entry, E);
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| entry[_next$][_previous$] = entry[_previous$];
|
| - entry[_previous$][_next$] = entry[_next$];
|
| + let next = entry[_previous$][_next$] = entry[_next$];
|
| this[_length$0] = dart.notNull(this[_length$0]) - 1;
|
| entry[_list] = entry[_next$] = entry[_previous$] = null;
|
| + if (dart.notNull(this.isEmpty)) {
|
| + this[_first] = null;
|
| + } else if (core.identical(entry, this[_first])) {
|
| + this[_first] = next;
|
| + }
|
| }
|
| }
|
| - LinkedList[dart.implements] = () => [collection._LinkedListLink];
|
| dart.setSignature(LinkedList, {
|
| constructors: () => ({LinkedList: [collection.LinkedList$(E), []]}),
|
| methods: () => ({
|
| @@ -21694,8 +21708,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| remove: [core.bool, [E]],
|
| clear: [dart.void, []],
|
| forEach: [dart.void, [dart.functionType(dart.void, [E])]],
|
| - [_insertAfter]: [dart.void, [collection._LinkedListLink, E]],
|
| - [_unlink$]: [dart.void, [collection.LinkedListEntry$(E)]]
|
| + [_insertBefore$]: [dart.void, [E, E], {updateFirst: core.bool}],
|
| + [_unlink$]: [dart.void, [E]]
|
| })
|
| });
|
| dart.defineExtensionMembers(LinkedList, [
|
| @@ -21710,25 +21724,28 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return LinkedList;
|
| });
|
| collection.LinkedList = collection.LinkedList$();
|
| + const _visitedFirst = Symbol('_visitedFirst');
|
| collection._LinkedListIterator$ = dart.generic(E => {
|
| class _LinkedListIterator extends core.Object {
|
| _LinkedListIterator(list) {
|
| this[_list] = list;
|
| this[_modificationCount] = list[_modificationCount];
|
| - this[_next$] = list[_next$];
|
| + this[_next$] = list[_first];
|
| + this[_visitedFirst] = false;
|
| this[_current$2] = null;
|
| }
|
| get current() {
|
| return this[_current$2];
|
| }
|
| moveNext() {
|
| - if (core.identical(this[_next$], this[_list])) {
|
| - this[_current$2] = null;
|
| - return false;
|
| - }
|
| if (this[_modificationCount] != this[_list][_modificationCount]) {
|
| dart.throw(new core.ConcurrentModificationError(this));
|
| }
|
| + if (dart.notNull(this[_list].isEmpty) || dart.notNull(this[_visitedFirst]) && core.identical(this[_next$], this[_list].first)) {
|
| + this[_current$2] = null;
|
| + return false;
|
| + }
|
| + this[_visitedFirst] = true;
|
| this[_current$2] = dart.as(this[_next$], E);
|
| this[_next$] = this[_next$][_next$];
|
| return true;
|
| @@ -21742,12 +21759,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return _LinkedListIterator;
|
| });
|
| collection._LinkedListIterator = collection._LinkedListIterator$();
|
| - collection._LinkedListLink = class _LinkedListLink extends core.Object {
|
| - _LinkedListLink() {
|
| - this[_next$] = null;
|
| - this[_previous$] = null;
|
| - }
|
| - };
|
| collection.LinkedListEntry$ = dart.generic(E => {
|
| class LinkedListEntry extends core.Object {
|
| LinkedListEntry() {
|
| @@ -21759,27 +21770,25 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return this[_list];
|
| }
|
| unlink() {
|
| - this[_list][_unlink$](this);
|
| + this[_list][_unlink$](dart.as(this, E));
|
| }
|
| get next() {
|
| - if (core.identical(this[_next$], this[_list])) return null;
|
| - let result = dart.as(this[_next$], E);
|
| - return result;
|
| + if (core.identical(this, this[_next$])) return null;
|
| + return this[_next$];
|
| }
|
| get previous() {
|
| - if (core.identical(this[_previous$], this[_list])) return null;
|
| - return dart.as(this[_previous$], E);
|
| + if (core.identical(this, this[_previous$])) return null;
|
| + return this[_previous$];
|
| }
|
| insertAfter(entry) {
|
| dart.as(entry, E);
|
| - this[_list][_insertAfter](this, entry);
|
| + this[_list][_insertBefore$](this[_next$], entry, {updateFirst: false});
|
| }
|
| insertBefore(entry) {
|
| dart.as(entry, E);
|
| - this[_list][_insertAfter](this[_previous$], entry);
|
| + this[_list][_insertBefore$](dart.as(this, E), entry, {updateFirst: true});
|
| }
|
| }
|
| - LinkedListEntry[dart.implements] = () => [collection._LinkedListLink];
|
| dart.setSignature(LinkedListEntry, {
|
| methods: () => ({
|
| unlink: [dart.void, []],
|
| @@ -22228,116 +22237,223 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return Queue;
|
| });
|
| collection.Queue = collection.Queue$();
|
| + const _previousLink = Symbol('_previousLink');
|
| + const _nextLink = Symbol('_nextLink');
|
| const _link = Symbol('_link');
|
| - const _asNonSentinelEntry = Symbol('_asNonSentinelEntry');
|
| + collection._DoubleLink$ = dart.generic(E => {
|
| + class _DoubleLink extends core.Object {
|
| + _DoubleLink() {
|
| + this[_previousLink] = null;
|
| + this[_nextLink] = null;
|
| + }
|
| + [_link](previous, next) {
|
| + dart.as(previous, E);
|
| + dart.as(next, E);
|
| + this[_nextLink] = next;
|
| + this[_previousLink] = previous;
|
| + if (previous != null) previous[_nextLink] = this;
|
| + if (next != null) next[_previousLink] = this;
|
| + }
|
| + [_unlink$]() {
|
| + if (this[_previousLink] != null) this[_previousLink][_nextLink] = this[_nextLink];
|
| + if (this[_nextLink] != null) this[_nextLink][_previousLink] = this[_previousLink];
|
| + this[_nextLink] = null;
|
| + this[_previousLink] = null;
|
| + }
|
| + }
|
| + dart.setSignature(_DoubleLink, {
|
| + methods: () => ({
|
| + [_link]: [dart.void, [E, E]],
|
| + [_unlink$]: [dart.void, []]
|
| + })
|
| + });
|
| + return _DoubleLink;
|
| + });
|
| + collection._DoubleLink = collection._DoubleLink$();
|
| collection.DoubleLinkedQueueEntry$ = dart.generic(E => {
|
| class DoubleLinkedQueueEntry extends core.Object {
|
| - DoubleLinkedQueueEntry(e) {
|
| - this[_element] = e;
|
| - this[_previous$] = null;
|
| - this[_next$] = null;
|
| + static new(element) {
|
| + return new (collection._UserDoubleLinkedQueueEntry$(E))(element);
|
| }
|
| - [_link](previous, next) {
|
| - dart.as(previous, collection.DoubleLinkedQueueEntry$(E));
|
| - dart.as(next, collection.DoubleLinkedQueueEntry$(E));
|
| - this[_next$] = next;
|
| - this[_previous$] = previous;
|
| - previous[_next$] = this;
|
| - next[_previous$] = this;
|
| + }
|
| + dart.setSignature(DoubleLinkedQueueEntry, {
|
| + constructors: () => ({new: [collection.DoubleLinkedQueueEntry$(E), [E]]})
|
| + });
|
| + return DoubleLinkedQueueEntry;
|
| + });
|
| + collection.DoubleLinkedQueueEntry = collection.DoubleLinkedQueueEntry$();
|
| + collection._UserDoubleLinkedQueueEntry$ = dart.generic(E => {
|
| + class _UserDoubleLinkedQueueEntry extends collection._DoubleLink {
|
| + _UserDoubleLinkedQueueEntry(element) {
|
| + this.element = element;
|
| + super._DoubleLink();
|
| }
|
| append(e) {
|
| dart.as(e, E);
|
| - new (collection.DoubleLinkedQueueEntry$(E))(e)[_link](this, this[_next$]);
|
| + new (collection._UserDoubleLinkedQueueEntry$(E))(e)[_link](this, this[_nextLink]);
|
| }
|
| prepend(e) {
|
| dart.as(e, E);
|
| - new (collection.DoubleLinkedQueueEntry$(E))(e)[_link](this[_previous$], this);
|
| + new (collection._UserDoubleLinkedQueueEntry$(E))(e)[_link](this[_previousLink], this);
|
| }
|
| remove() {
|
| - this[_previous$][_next$] = this[_next$];
|
| - this[_next$][_previous$] = this[_previous$];
|
| - this[_next$] = null;
|
| - this[_previous$] = null;
|
| - return this[_element];
|
| - }
|
| - [_asNonSentinelEntry]() {
|
| - return this;
|
| + this[_unlink$]();
|
| + return this.element;
|
| }
|
| previousEntry() {
|
| - return this[_previous$][_asNonSentinelEntry]();
|
| + return this[_previousLink];
|
| }
|
| nextEntry() {
|
| - return this[_next$][_asNonSentinelEntry]();
|
| - }
|
| - get element() {
|
| - return this[_element];
|
| - }
|
| - set element(e) {
|
| - dart.as(e, E);
|
| - this[_element] = e;
|
| + return this[_nextLink];
|
| }
|
| }
|
| - dart.setSignature(DoubleLinkedQueueEntry, {
|
| - constructors: () => ({DoubleLinkedQueueEntry: [collection.DoubleLinkedQueueEntry$(E), [E]]}),
|
| + dart.setBaseClass(_UserDoubleLinkedQueueEntry, collection._DoubleLink$(_UserDoubleLinkedQueueEntry));
|
| + _UserDoubleLinkedQueueEntry[dart.implements] = () => [collection.DoubleLinkedQueueEntry$(E)];
|
| + dart.setSignature(_UserDoubleLinkedQueueEntry, {
|
| + constructors: () => ({_UserDoubleLinkedQueueEntry: [collection._UserDoubleLinkedQueueEntry$(E), [E]]}),
|
| methods: () => ({
|
| - [_link]: [dart.void, [collection.DoubleLinkedQueueEntry$(E), collection.DoubleLinkedQueueEntry$(E)]],
|
| append: [dart.void, [E]],
|
| prepend: [dart.void, [E]],
|
| remove: [E, []],
|
| - [_asNonSentinelEntry]: [collection.DoubleLinkedQueueEntry$(E), []],
|
| previousEntry: [collection.DoubleLinkedQueueEntry$(E), []],
|
| nextEntry: [collection.DoubleLinkedQueueEntry$(E), []]
|
| })
|
| });
|
| - return DoubleLinkedQueueEntry;
|
| + return _UserDoubleLinkedQueueEntry;
|
| });
|
| - collection.DoubleLinkedQueueEntry = collection.DoubleLinkedQueueEntry$();
|
| - collection._DoubleLinkedQueueEntrySentinel$ = dart.generic(E => {
|
| - class _DoubleLinkedQueueEntrySentinel extends collection.DoubleLinkedQueueEntry$(E) {
|
| - _DoubleLinkedQueueEntrySentinel() {
|
| - super.DoubleLinkedQueueEntry(null);
|
| - this[_link](this, this);
|
| + collection._UserDoubleLinkedQueueEntry = collection._UserDoubleLinkedQueueEntry$();
|
| + const _queue = Symbol('_queue');
|
| + const _append = Symbol('_append');
|
| + const _prepend = Symbol('_prepend');
|
| + const _asNonSentinelEntry = Symbol('_asNonSentinelEntry');
|
| + collection._DoubleLinkedQueueEntry$ = dart.generic(E => {
|
| + class _DoubleLinkedQueueEntry extends collection._DoubleLink {
|
| + _DoubleLinkedQueueEntry(queue) {
|
| + this[_queue] = queue;
|
| + super._DoubleLink();
|
| + }
|
| + [_append](e) {
|
| + dart.as(e, E);
|
| + new (collection._DoubleLinkedQueueElement$(E))(e, this[_queue])[_link](this, this[_nextLink]);
|
| + }
|
| + [_prepend](e) {
|
| + dart.as(e, E);
|
| + new (collection._DoubleLinkedQueueElement$(E))(e, this[_queue])[_link](this[_previousLink], this);
|
| + }
|
| + nextEntry() {
|
| + return this[_nextLink][_asNonSentinelEntry]();
|
| + }
|
| + previousEntry() {
|
| + return this[_previousLink][_asNonSentinelEntry]();
|
| + }
|
| + }
|
| + dart.setBaseClass(_DoubleLinkedQueueEntry, collection._DoubleLink$(_DoubleLinkedQueueEntry));
|
| + dart.setSignature(_DoubleLinkedQueueEntry, {
|
| + constructors: () => ({_DoubleLinkedQueueEntry: [collection._DoubleLinkedQueueEntry$(E), [collection.DoubleLinkedQueue$(E)]]}),
|
| + methods: () => ({
|
| + [_append]: [dart.void, [E]],
|
| + [_prepend]: [dart.void, [E]],
|
| + nextEntry: [collection.DoubleLinkedQueueEntry$(E), []],
|
| + previousEntry: [collection.DoubleLinkedQueueEntry$(E), []]
|
| + })
|
| + });
|
| + return _DoubleLinkedQueueEntry;
|
| + });
|
| + collection._DoubleLinkedQueueEntry = collection._DoubleLinkedQueueEntry$();
|
| + const _elementCount = Symbol('_elementCount');
|
| + collection._DoubleLinkedQueueElement$ = dart.generic(E => {
|
| + class _DoubleLinkedQueueElement extends collection._DoubleLinkedQueueEntry$(E) {
|
| + _DoubleLinkedQueueElement(element, queue) {
|
| + this.element = element;
|
| + super._DoubleLinkedQueueEntry(queue);
|
| + }
|
| + append(e) {
|
| + dart.as(e, E);
|
| + this[_append](e);
|
| + if (this[_queue] != null) {
|
| + let o = this[_queue];
|
| + o[_elementCount] = dart.notNull(o[_elementCount]) + 1;
|
| + }
|
| + }
|
| + prepend(e) {
|
| + dart.as(e, E);
|
| + this[_prepend](e);
|
| + if (this[_queue] != null) {
|
| + let o = this[_queue];
|
| + o[_elementCount] = dart.notNull(o[_elementCount]) + 1;
|
| + }
|
| + }
|
| + [_remove]() {
|
| + this[_queue] = null;
|
| + this[_unlink$]();
|
| + return this.element;
|
| }
|
| remove() {
|
| - dart.throw(_internal.IterableElementError.noElement());
|
| + if (this[_queue] != null) {
|
| + let o = this[_queue];
|
| + o[_elementCount] = dart.notNull(o[_elementCount]) - 1;
|
| + }
|
| + return this[_remove]();
|
| + }
|
| + [_asNonSentinelEntry]() {
|
| + return this;
|
| + }
|
| + }
|
| + _DoubleLinkedQueueElement[dart.implements] = () => [collection.DoubleLinkedQueueEntry$(E)];
|
| + dart.setSignature(_DoubleLinkedQueueElement, {
|
| + constructors: () => ({_DoubleLinkedQueueElement: [collection._DoubleLinkedQueueElement$(E), [E, collection.DoubleLinkedQueue$(E)]]}),
|
| + methods: () => ({
|
| + append: [dart.void, [E]],
|
| + prepend: [dart.void, [E]],
|
| + [_remove]: [E, []],
|
| + remove: [E, []],
|
| + [_asNonSentinelEntry]: [collection._DoubleLinkedQueueElement$(E), []]
|
| + })
|
| + });
|
| + return _DoubleLinkedQueueElement;
|
| + });
|
| + collection._DoubleLinkedQueueElement = collection._DoubleLinkedQueueElement$();
|
| + collection._DoubleLinkedQueueSentinel$ = dart.generic(E => {
|
| + class _DoubleLinkedQueueSentinel extends collection._DoubleLinkedQueueEntry$(E) {
|
| + _DoubleLinkedQueueSentinel(queue) {
|
| + super._DoubleLinkedQueueEntry(queue);
|
| + this[_previousLink] = this;
|
| + this[_nextLink] = this;
|
| }
|
| [_asNonSentinelEntry]() {
|
| return null;
|
| }
|
| - set element(e) {
|
| - dart.as(e, E);
|
| - dart.assert(false);
|
| + [_remove]() {
|
| + dart.throw(_internal.IterableElementError.noElement());
|
| }
|
| get element() {
|
| dart.throw(_internal.IterableElementError.noElement());
|
| }
|
| }
|
| - dart.setSignature(_DoubleLinkedQueueEntrySentinel, {
|
| - constructors: () => ({_DoubleLinkedQueueEntrySentinel: [collection._DoubleLinkedQueueEntrySentinel$(E), []]}),
|
| + dart.setSignature(_DoubleLinkedQueueSentinel, {
|
| + constructors: () => ({_DoubleLinkedQueueSentinel: [collection._DoubleLinkedQueueSentinel$(E), [collection.DoubleLinkedQueue$(E)]]}),
|
| methods: () => ({
|
| - remove: [E, []],
|
| - [_asNonSentinelEntry]: [collection.DoubleLinkedQueueEntry$(E), []]
|
| + [_asNonSentinelEntry]: [collection.DoubleLinkedQueueEntry$(E), []],
|
| + [_remove]: [E, []]
|
| })
|
| });
|
| - return _DoubleLinkedQueueEntrySentinel;
|
| + return _DoubleLinkedQueueSentinel;
|
| });
|
| - collection._DoubleLinkedQueueEntrySentinel = collection._DoubleLinkedQueueEntrySentinel$();
|
| + collection._DoubleLinkedQueueSentinel = collection._DoubleLinkedQueueSentinel$();
|
| const _sentinel = Symbol('_sentinel');
|
| - const _elementCount = Symbol('_elementCount');
|
| const _filter = Symbol('_filter');
|
| collection.DoubleLinkedQueue$ = dart.generic(E => {
|
| - class DoubleLinkedQueue extends collection.IterableBase$(E) {
|
| + class DoubleLinkedQueue extends core.Iterable$(E) {
|
| DoubleLinkedQueue() {
|
| this[_sentinel] = null;
|
| this[_elementCount] = 0;
|
| - super.IterableBase();
|
| - this[_sentinel] = new (collection._DoubleLinkedQueueEntrySentinel$(E))();
|
| + super.Iterable();
|
| + this[_sentinel] = new (collection._DoubleLinkedQueueSentinel$(E))(this);
|
| }
|
| static from(elements) {
|
| let list = new (collection.DoubleLinkedQueue$(E))();
|
| for (let e of elements) {
|
| - dart.as(e, E);
|
| - list.addLast(e);
|
| + list.addLast(dart.as(e, E));
|
| }
|
| return dart.as(list, collection.DoubleLinkedQueue$(E));
|
| }
|
| @@ -22346,55 +22462,57 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| addLast(value) {
|
| dart.as(value, E);
|
| - this[_sentinel].prepend(value);
|
| + this[_sentinel][_prepend](value);
|
| this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
|
| }
|
| addFirst(value) {
|
| dart.as(value, E);
|
| - this[_sentinel].append(value);
|
| + this[_sentinel][_append](value);
|
| this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
|
| }
|
| add(value) {
|
| dart.as(value, E);
|
| - this[_sentinel].prepend(value);
|
| + this[_sentinel][_prepend](value);
|
| this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
|
| }
|
| addAll(iterable) {
|
| dart.as(iterable, core.Iterable$(E));
|
| for (let value of iterable) {
|
| - this[_sentinel].prepend(value);
|
| + this[_sentinel][_prepend](value);
|
| this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
|
| }
|
| }
|
| removeLast() {
|
| - let result = this[_sentinel][_previous$].remove();
|
| + let lastEntry = this[_sentinel][_previousLink];
|
| + let result = lastEntry[_remove]();
|
| this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
|
| return result;
|
| }
|
| removeFirst() {
|
| - let result = this[_sentinel][_next$].remove();
|
| + let firstEntry = this[_sentinel][_nextLink];
|
| + let result = firstEntry[_remove]();
|
| this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
|
| return result;
|
| }
|
| remove(o) {
|
| - let entry = this[_sentinel][_next$];
|
| + let entry = this[_sentinel][_nextLink];
|
| while (!core.identical(entry, this[_sentinel])) {
|
| if (dart.equals(entry.element, o)) {
|
| - entry.remove();
|
| + entry[_remove]();
|
| this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
|
| return true;
|
| }
|
| - entry = entry[_next$];
|
| + entry = entry[_nextLink];
|
| }
|
| return false;
|
| }
|
| [_filter](test, removeMatching) {
|
| dart.as(test, dart.functionType(core.bool, [E]));
|
| - let entry = this[_sentinel][_next$];
|
| + let entry = this[_sentinel][_nextLink];
|
| while (!core.identical(entry, this[_sentinel])) {
|
| - let next = entry[_next$];
|
| + let next = entry[_nextLink];
|
| if (core.identical(removeMatching, test(entry.element))) {
|
| - entry.remove();
|
| + entry[_remove]();
|
| this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
|
| }
|
| entry = next;
|
| @@ -22409,14 +22527,17 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_filter](test, false);
|
| }
|
| get first() {
|
| - return this[_sentinel][_next$].element;
|
| + let firstEntry = this[_sentinel][_nextLink];
|
| + return firstEntry.element;
|
| }
|
| get last() {
|
| - return this[_sentinel][_previous$].element;
|
| + let lastEntry = this[_sentinel][_previousLink];
|
| + return lastEntry.element;
|
| }
|
| get single() {
|
| - if (core.identical(this[_sentinel][_next$], this[_sentinel][_previous$])) {
|
| - return this[_sentinel][_next$].element;
|
| + if (core.identical(this[_sentinel][_nextLink], this[_sentinel][_previousLink])) {
|
| + let entry = this[_sentinel][_nextLink];
|
| + return entry.element;
|
| }
|
| dart.throw(_internal.IterableElementError.tooMany());
|
| }
|
| @@ -22427,19 +22548,20 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return this[_sentinel].nextEntry();
|
| }
|
| get isEmpty() {
|
| - return core.identical(this[_sentinel][_next$], this[_sentinel]);
|
| + return core.identical(this[_sentinel][_nextLink], this[_sentinel]);
|
| }
|
| clear() {
|
| - this[_sentinel][_next$] = this[_sentinel];
|
| - this[_sentinel][_previous$] = this[_sentinel];
|
| + this[_sentinel][_nextLink] = this[_sentinel];
|
| + this[_sentinel][_previousLink] = this[_sentinel];
|
| this[_elementCount] = 0;
|
| }
|
| forEachEntry(f) {
|
| dart.as(f, dart.functionType(dart.void, [collection.DoubleLinkedQueueEntry$(E)]));
|
| - let entry = this[_sentinel][_next$];
|
| + let entry = this[_sentinel][_nextLink];
|
| while (!core.identical(entry, this[_sentinel])) {
|
| - let nextEntry = entry[_next$];
|
| - f(entry);
|
| + let nextEntry = entry[_nextLink];
|
| + let element = dart.as(entry, collection._DoubleLinkedQueueElement$(E));
|
| + f(element);
|
| entry = nextEntry;
|
| }
|
| }
|
| @@ -22490,18 +22612,23 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| class _DoubleLinkedQueueIterator extends core.Object {
|
| _DoubleLinkedQueueIterator(sentinel) {
|
| this[_sentinel] = sentinel;
|
| - this[_nextEntry] = sentinel[_next$];
|
| + this[_nextEntry] = sentinel[_nextLink];
|
| this[_current$2] = null;
|
| }
|
| moveNext() {
|
| - if (!core.identical(this[_nextEntry], this[_sentinel])) {
|
| - this[_current$2] = this[_nextEntry][_element];
|
| - this[_nextEntry] = this[_nextEntry][_next$];
|
| - return true;
|
| + if (core.identical(this[_nextEntry], this[_sentinel])) {
|
| + this[_current$2] = null;
|
| + this[_nextEntry] = null;
|
| + this[_sentinel] = null;
|
| + return false;
|
| }
|
| - this[_current$2] = null;
|
| - this[_nextEntry] = this[_sentinel] = null;
|
| - return false;
|
| + let elementEntry = dart.as(this[_nextEntry], collection._DoubleLinkedQueueElement$(E));
|
| + if (elementEntry[_queue] == null) {
|
| + dart.throw(new core.ConcurrentModificationError(this[_sentinel][_queue]));
|
| + }
|
| + this[_current$2] = elementEntry.element;
|
| + this[_nextEntry] = elementEntry[_nextLink];
|
| + return true;
|
| }
|
| get current() {
|
| return this[_current$2];
|
| @@ -22509,7 +22636,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| _DoubleLinkedQueueIterator[dart.implements] = () => [core.Iterator$(E)];
|
| dart.setSignature(_DoubleLinkedQueueIterator, {
|
| - constructors: () => ({_DoubleLinkedQueueIterator: [collection._DoubleLinkedQueueIterator$(E), [collection._DoubleLinkedQueueEntrySentinel$(E)]]}),
|
| + constructors: () => ({_DoubleLinkedQueueIterator: [collection._DoubleLinkedQueueIterator$(E), [collection._DoubleLinkedQueueSentinel$(E)]]}),
|
| methods: () => ({moveNext: [core.bool, []]})
|
| });
|
| return _DoubleLinkedQueueIterator;
|
| @@ -22523,14 +22650,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| const _preGrow = Symbol('_preGrow');
|
| const _grow = Symbol('_grow');
|
| collection.ListQueue$ = dart.generic(E => {
|
| - class ListQueue extends collection.IterableBase$(E) {
|
| + class ListQueue extends core.Iterable$(E) {
|
| ListQueue(initialCapacity) {
|
| if (initialCapacity === void 0) initialCapacity = null;
|
| this[_head] = 0;
|
| this[_tail] = 0;
|
| this[_table] = null;
|
| this[_modificationCount] = 0;
|
| - super.IterableBase();
|
| + super.Iterable();
|
| if (initialCapacity == null || dart.notNull(initialCapacity) < dart.notNull(collection.ListQueue._INITIAL_CAPACITY)) {
|
| initialCapacity = collection.ListQueue._INITIAL_CAPACITY;
|
| } else if (!dart.notNull(collection.ListQueue._isPowerOf2(initialCapacity))) {
|
| @@ -22544,8 +22671,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let length = elements[dartx.length];
|
| let queue = new (collection.ListQueue$(E))(dart.notNull(length) + 1);
|
| dart.assert(dart.notNull(queue[_table][dartx.length]) > dart.notNull(length));
|
| - let sourceList = elements;
|
| - queue[_table][dartx.setRange](0, length, dart.as(sourceList, core.Iterable$(E)), 0);
|
| + for (let i = 0; i < dart.notNull(length); i++) {
|
| + queue[_table][dartx.set](i, dart.as(elements[dartx.get](i), E));
|
| + }
|
| queue[_tail] = length;
|
| return queue;
|
| } else {
|
| @@ -22555,8 +22683,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| let result = new (collection.ListQueue$(E))(capacity);
|
| for (let element of elements) {
|
| - dart.as(element, E);
|
| - result.addLast(element);
|
| + result.addLast(dart.as(element, E));
|
| }
|
| return result;
|
| }
|
| @@ -22607,29 +22734,29 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_writeToList](list);
|
| return list;
|
| }
|
| - add(element) {
|
| - dart.as(element, E);
|
| - this[_add$0](element);
|
| + add(value) {
|
| + dart.as(value, E);
|
| + this[_add$0](value);
|
| }
|
| addAll(elements) {
|
| dart.as(elements, core.Iterable$(E));
|
| - if (dart.is(elements, core.List)) {
|
| - let list = dart.as(elements, core.List);
|
| + if (dart.is(elements, core.List$(E))) {
|
| + let list = elements;
|
| let addCount = list[dartx.length];
|
| let length = this.length;
|
| if (dart.notNull(length) + dart.notNull(addCount) >= dart.notNull(this[_table][dartx.length])) {
|
| this[_preGrow](dart.notNull(length) + dart.notNull(addCount));
|
| - this[_table][dartx.setRange](length, dart.notNull(length) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
|
| + this[_table][dartx.setRange](length, dart.notNull(length) + dart.notNull(addCount), list, 0);
|
| this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
|
| } else {
|
| let endSpace = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_tail]);
|
| if (dart.notNull(addCount) < endSpace) {
|
| - this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
|
| + this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(addCount), list, 0);
|
| this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
|
| } else {
|
| let preSpace = dart.notNull(addCount) - endSpace;
|
| - this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + endSpace, dart.as(list, core.Iterable$(E)), 0);
|
| - this[_table][dartx.setRange](0, preSpace, dart.as(list, core.Iterable$(E)), endSpace);
|
| + this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + endSpace, list, 0);
|
| + this[_table][dartx.setRange](0, preSpace, list, endSpace);
|
| this[_tail] = preSpace;
|
| }
|
| }
|
| @@ -22639,10 +22766,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_add$0](element);
|
| }
|
| }
|
| - remove(object) {
|
| + remove(value) {
|
| for (let i = this[_head]; i != this[_tail]; i = (dart.notNull(i) + 1 & dart.notNull(this[_table][dartx.length]) - 1) >>> 0) {
|
| let element = this[_table][dartx.get](i);
|
| - if (dart.equals(element, object)) {
|
| + if (dart.equals(element, value)) {
|
| this[_remove](i);
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| return true;
|
| @@ -22652,7 +22779,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| [_filterWhere](test, removeMatching) {
|
| dart.as(test, dart.functionType(core.bool, [E]));
|
| - let index = this[_head];
|
| let modificationCount = this[_modificationCount];
|
| let i = this[_head];
|
| while (i != this[_tail]) {
|
| @@ -22687,14 +22813,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| toString() {
|
| return collection.IterableBase.iterableToFullString(this, "{", "}");
|
| }
|
| - addLast(element) {
|
| - dart.as(element, E);
|
| - this[_add$0](element);
|
| + addLast(value) {
|
| + dart.as(value, E);
|
| + this[_add$0](value);
|
| }
|
| - addFirst(element) {
|
| - dart.as(element, E);
|
| + addFirst(value) {
|
| + dart.as(value, E);
|
| this[_head] = (dart.notNull(this[_head]) - 1 & dart.notNull(this[_table][dartx.length]) - 1) >>> 0;
|
| - this[_table][dartx.set](this[_head], element);
|
| + this[_table][dartx.set](this[_head], value);
|
| if (this[_head] == this[_tail]) this[_grow]();
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| }
|
| @@ -22847,7 +22973,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| });
|
| collection.ListQueue = collection.ListQueue$();
|
| collection.ListQueue._INITIAL_CAPACITY = 8;
|
| - const _queue = Symbol('_queue');
|
| const _end = Symbol('_end');
|
| const _position = Symbol('_position');
|
| collection._ListQueueIterator$ = dart.generic(E => {
|
| @@ -22868,14 +22993,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_current$2] = null;
|
| return false;
|
| }
|
| - this[_current$2] = dart.as(this[_queue][_table][dartx.get](this[_position]), E);
|
| + this[_current$2] = this[_queue][_table][dartx.get](this[_position]);
|
| this[_position] = (dart.notNull(this[_position]) + 1 & dart.notNull(this[_queue][_table][dartx.length]) - 1) >>> 0;
|
| return true;
|
| }
|
| }
|
| _ListQueueIterator[dart.implements] = () => [core.Iterator$(E)];
|
| dart.setSignature(_ListQueueIterator, {
|
| - constructors: () => ({_ListQueueIterator: [collection._ListQueueIterator$(E), [collection.ListQueue]]}),
|
| + constructors: () => ({_ListQueueIterator: [collection._ListQueueIterator$(E), [collection.ListQueue$(E)]]}),
|
| methods: () => ({moveNext: [core.bool, []]})
|
| });
|
| return _ListQueueIterator;
|
| @@ -22913,10 +23038,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return _SplayTreeMapNode;
|
| });
|
| collection._SplayTreeMapNode = collection._SplayTreeMapNode$();
|
| - const _dummy = Symbol('_dummy');
|
| - const _root = Symbol('_root');
|
| const _count$ = Symbol('_count');
|
| const _splayCount = Symbol('_splayCount');
|
| + const _root = Symbol('_root');
|
| + const _dummy = Symbol('_dummy');
|
| const _comparator = Symbol('_comparator');
|
| const _compare = Symbol('_compare');
|
| const _splay = Symbol('_splay');
|
| @@ -22924,11 +23049,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| const _splayMax = Symbol('_splayMax');
|
| const _addNewRoot = Symbol('_addNewRoot');
|
| const _clear$ = Symbol('_clear');
|
| - collection._SplayTree$ = dart.generic(K => {
|
| + collection._SplayTree$ = dart.generic((K, Node) => {
|
| class _SplayTree extends core.Object {
|
| _SplayTree() {
|
| - this[_dummy] = new (collection._SplayTreeNode$(K))(null);
|
| - this[_root] = null;
|
| this[_count$] = 0;
|
| this[_modificationCount] = 0;
|
| this[_splayCount] = 0;
|
| @@ -22949,17 +23072,17 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let tmp = current.left;
|
| current.left = tmp.right;
|
| tmp.right = current;
|
| - current = tmp;
|
| + current = dart.as(tmp, Node);
|
| if (current.left == null) break;
|
| }
|
| right.left = current;
|
| right = current;
|
| - current = current.left;
|
| + current = dart.as(current.left, Node);
|
| } else if (dart.notNull(comp) < 0) {
|
| if (current.right == null) break;
|
| comp = this[_compare](current.right.key, key);
|
| if (dart.notNull(comp) < 0) {
|
| - let tmp = current.right;
|
| + let tmp = dart.as(current.right, Node);
|
| current.right = tmp.left;
|
| tmp.left = current;
|
| current = tmp;
|
| @@ -22967,7 +23090,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| left.right = current;
|
| left = current;
|
| - current = current.right;
|
| + current = dart.as(current.right, Node);
|
| } else {
|
| break;
|
| }
|
| @@ -22983,26 +23106,26 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return comp;
|
| }
|
| [_splayMin](node) {
|
| - dart.as(node, collection._SplayTreeNode$(K));
|
| + dart.as(node, Node);
|
| let current = node;
|
| while (current.left != null) {
|
| - let left = current.left;
|
| + let left = dart.as(current.left, Node);
|
| current.left = left.right;
|
| left.right = current;
|
| current = left;
|
| }
|
| - return dart.as(current, collection._SplayTreeNode$(K));
|
| + return current;
|
| }
|
| [_splayMax](node) {
|
| - dart.as(node, collection._SplayTreeNode$(K));
|
| + dart.as(node, Node);
|
| let current = node;
|
| while (current.right != null) {
|
| - let right = current.right;
|
| + let right = dart.as(current.right, Node);
|
| current.right = right.left;
|
| right.left = current;
|
| current = right;
|
| }
|
| - return dart.as(current, collection._SplayTreeNode$(K));
|
| + return current;
|
| }
|
| [_remove](key) {
|
| dart.as(key, K);
|
| @@ -23012,17 +23135,17 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| let result = this[_root];
|
| this[_count$] = dart.notNull(this[_count$]) - 1;
|
| if (this[_root].left == null) {
|
| - this[_root] = this[_root].right;
|
| + this[_root] = dart.as(this[_root].right, Node);
|
| } else {
|
| - let right = this[_root].right;
|
| - this[_root] = this[_splayMax](this[_root].left);
|
| + let right = dart.as(this[_root].right, Node);
|
| + this[_root] = this[_splayMax](dart.as(this[_root].left, Node));
|
| this[_root].right = right;
|
| }
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| return result;
|
| }
|
| [_addNewRoot](node, comp) {
|
| - dart.as(node, collection._SplayTreeNode$(K));
|
| + dart.as(node, Node);
|
| this[_count$] = dart.notNull(this[_count$]) + 1;
|
| this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
|
| if (this[_root] == null) {
|
| @@ -23059,29 +23182,49 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| dart.setSignature(_SplayTree, {
|
| methods: () => ({
|
| [_splay]: [core.int, [K]],
|
| - [_splayMin]: [collection._SplayTreeNode$(K), [collection._SplayTreeNode$(K)]],
|
| - [_splayMax]: [collection._SplayTreeNode$(K), [collection._SplayTreeNode$(K)]],
|
| - [_remove]: [collection._SplayTreeNode, [K]],
|
| - [_addNewRoot]: [dart.void, [collection._SplayTreeNode$(K), core.int]],
|
| + [_splayMin]: [Node, [Node]],
|
| + [_splayMax]: [Node, [Node]],
|
| + [_remove]: [Node, [K]],
|
| + [_addNewRoot]: [dart.void, [Node, core.int]],
|
| [_clear$]: [dart.void, []]
|
| })
|
| });
|
| return _SplayTree;
|
| });
|
| collection._SplayTree = collection._SplayTree$();
|
| + collection._TypeTest$ = dart.generic(T => {
|
| + class _TypeTest extends core.Object {
|
| + test(v) {
|
| + return dart.is(v, T);
|
| + }
|
| + }
|
| + dart.setSignature(_TypeTest, {
|
| + methods: () => ({test: [core.bool, [dart.dynamic]]})
|
| + });
|
| + return _TypeTest;
|
| + });
|
| + collection._TypeTest = collection._TypeTest$();
|
| collection.SplayTreeMap$ = dart.generic((K, V) => {
|
| - class SplayTreeMap extends collection._SplayTree$(K) {
|
| + class SplayTreeMap extends collection._SplayTree$(K, collection._SplayTreeMapNode$(K, V)) {
|
| SplayTreeMap(compare, isValidKey) {
|
| if (compare === void 0) compare = null;
|
| if (isValidKey === void 0) isValidKey = null;
|
| - this[_comparator] = dart.as(compare == null ? core.Comparable.compare : compare, core.Comparator$(K));
|
| - this[_validKey] = isValidKey != null ? isValidKey : dart.fn(v => dart.is(v, K), core.bool, [core.Object]);
|
| + this[_dummy] = new (collection._SplayTreeMapNode$(K, V))(null, null);
|
| + this[_comparator] = (() => {
|
| + let l = compare;
|
| + return l != null ? l : dart.as(core.Comparable.compare, core.Comparator$(K));
|
| + })();
|
| + this[_validKey] = (() => {
|
| + let l = isValidKey;
|
| + return l != null ? l : dart.fn(v => dart.is(v, K), core.bool, [dart.dynamic]);
|
| + })();
|
| + this[_root] = null;
|
| super._SplayTree();
|
| }
|
| static from(other, compare, isValidKey) {
|
| if (compare === void 0) compare = null;
|
| if (isValidKey === void 0) isValidKey = null;
|
| - let result = new (collection.SplayTreeMap$(K, V))();
|
| + let result = new (collection.SplayTreeMap$(K, V))(compare, isValidKey);
|
| other[dartx.forEach](dart.fn((k, v) => {
|
| result.set(dart.as(k, K), dart.as(v, V));
|
| }, dart.void, [dart.dynamic, dart.dynamic]));
|
| @@ -23109,26 +23252,26 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return this[_comparator](key1, key2);
|
| }
|
| _internal() {
|
| + this[_dummy] = new (collection._SplayTreeMapNode$(K, V))(null, null);
|
| + this[_root] = null;
|
| this[_comparator] = null;
|
| this[_validKey] = null;
|
| super._SplayTree();
|
| }
|
| get(key) {
|
| - if (key == null) dart.throw(new core.ArgumentError(key));
|
| - if (!dart.notNull(this[_validKey](key))) return null;
|
| + if (!dart.notNull(dart.dcall(this[_validKey], key))) return null;
|
| if (this[_root] != null) {
|
| let comp = this[_splay](dart.as(key, K));
|
| if (comp == 0) {
|
| - let mapRoot = dart.as(this[_root], collection._SplayTreeMapNode);
|
| - return dart.as(mapRoot.value, V);
|
| + return this[_root].value;
|
| }
|
| }
|
| return null;
|
| }
|
| remove(key) {
|
| - if (!dart.notNull(this[_validKey](key))) return null;
|
| - let mapRoot = dart.as(this[_remove](dart.as(key, K)), collection._SplayTreeMapNode);
|
| - if (mapRoot != null) return dart.as(mapRoot.value, V);
|
| + if (!dart.notNull(dart.dcall(this[_validKey], key))) return null;
|
| + let mapRoot = this[_remove](dart.as(key, K));
|
| + if (mapRoot != null) return mapRoot.value;
|
| return null;
|
| }
|
| set(key, value) {
|
| @@ -23138,11 +23281,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| if (key == null) dart.throw(new core.ArgumentError(key));
|
| let comp = this[_splay](key);
|
| if (comp == 0) {
|
| - let mapRoot = dart.as(this[_root], collection._SplayTreeMapNode);
|
| - mapRoot.value = value;
|
| + this[_root].value = value;
|
| return;
|
| }
|
| - this[_addNewRoot](new (collection._SplayTreeMapNode$(K, dart.dynamic))(key, value), comp);
|
| + this[_addNewRoot](new (collection._SplayTreeMapNode$(K, V))(key, value), comp);
|
| })();
|
| return value;
|
| }
|
| @@ -23152,8 +23294,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| if (key == null) dart.throw(new core.ArgumentError(key));
|
| let comp = this[_splay](key);
|
| if (comp == 0) {
|
| - let mapRoot = dart.as(this[_root], collection._SplayTreeMapNode);
|
| - return dart.as(mapRoot.value, V);
|
| + return this[_root].value;
|
| }
|
| let modificationCount = this[_modificationCount];
|
| let splayCount = this[_splayCount];
|
| @@ -23165,7 +23306,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| comp = this[_splay](key);
|
| dart.assert(comp != 0);
|
| }
|
| - this[_addNewRoot](new (collection._SplayTreeMapNode$(K, dart.dynamic))(key, value), comp);
|
| + this[_addNewRoot](new (collection._SplayTreeMapNode$(K, V))(key, value), comp);
|
| return value;
|
| }
|
| addAll(other) {
|
| @@ -23197,7 +23338,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_clear$]();
|
| }
|
| containsKey(key) {
|
| - return dart.notNull(this[_validKey](key)) && this[_splay](dart.as(key, K)) == 0;
|
| + return dart.notNull(dart.dcall(this[_validKey], key)) && this[_splay](dart.as(key, K)) == 0;
|
| }
|
| containsValue(value) {
|
| let found = false;
|
| @@ -23214,7 +23355,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return false;
|
| }).bind(this);
|
| dart.fn(visit, core.bool, [collection._SplayTreeMapNode]);
|
| - return visit(dart.as(this[_root], collection._SplayTreeMapNode));
|
| + return visit(this[_root]);
|
| }
|
| get keys() {
|
| return new (collection._SplayTreeKeyIterable$(K))(this);
|
| @@ -23227,11 +23368,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| firstKey() {
|
| if (this[_root] == null) return null;
|
| - return dart.as(this[_first].key, K);
|
| + return this[_first].key;
|
| }
|
| lastKey() {
|
| if (this[_root] == null) return null;
|
| - return dart.as(this[_last].key, K);
|
| + return this[_last].key;
|
| }
|
| lastKeyBefore(key) {
|
| dart.as(key, K);
|
| @@ -23264,10 +23405,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| SplayTreeMap[dart.implements] = () => [core.Map$(K, V)];
|
| dart.setSignature(SplayTreeMap, {
|
| constructors: () => ({
|
| - SplayTreeMap: [collection.SplayTreeMap$(K, V), [], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
|
| - from: [collection.SplayTreeMap$(K, V), [core.Map], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
|
| - fromIterable: [collection.SplayTreeMap$(K, V), [core.Iterable], {key: dart.functionType(K, [dart.dynamic]), value: dart.functionType(V, [dart.dynamic]), compare: dart.functionType(core.int, [K, K]), isValidKey: dart.functionType(core.bool, [core.Object])}],
|
| - fromIterables: [collection.SplayTreeMap$(K, V), [core.Iterable$(K), core.Iterable$(V)], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
|
| + SplayTreeMap: [collection.SplayTreeMap$(K, V), [], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [dart.dynamic])]],
|
| + from: [collection.SplayTreeMap$(K, V), [core.Map], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [dart.dynamic])]],
|
| + fromIterable: [collection.SplayTreeMap$(K, V), [core.Iterable], {key: dart.functionType(K, [dart.dynamic]), value: dart.functionType(V, [dart.dynamic]), compare: dart.functionType(core.int, [K, K]), isValidKey: dart.functionType(core.bool, [dart.dynamic])}],
|
| + fromIterables: [collection.SplayTreeMap$(K, V), [core.Iterable$(K), core.Iterable$(V)], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [dart.dynamic])]],
|
| _internal: [collection.SplayTreeMap$(K, V), []]
|
| }),
|
| methods: () => ({
|
| @@ -23312,10 +23453,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| const _findLeftMostDescendent = Symbol('_findLeftMostDescendent');
|
| const _getValue = Symbol('_getValue');
|
| const _rebuildWorkList = Symbol('_rebuildWorkList');
|
| - collection._SplayTreeIterator$ = dart.generic(T => {
|
| + collection._SplayTreeIterator$ = dart.generic((K, T) => {
|
| class _SplayTreeIterator extends core.Object {
|
| _SplayTreeIterator(tree) {
|
| - this[_workList] = dart.list([], collection._SplayTreeNode);
|
| + this[_workList] = dart.list([], collection._SplayTreeNode$(K));
|
| this[_tree] = tree;
|
| this[_modificationCount] = tree[_modificationCount];
|
| this[_splayCount] = tree[_splayCount];
|
| @@ -23323,7 +23464,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| this[_findLeftMostDescendent](tree[_root]);
|
| }
|
| startAt(tree, startKey) {
|
| - this[_workList] = dart.list([], collection._SplayTreeNode);
|
| + this[_workList] = dart.list([], collection._SplayTreeNode$(K));
|
| this[_tree] = tree;
|
| this[_modificationCount] = tree[_modificationCount];
|
| this[_splayCount] = null;
|
| @@ -23339,15 +23480,17 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| get current() {
|
| if (this[_currentNode] == null) return null;
|
| - return this[_getValue](dart.as(this[_currentNode], collection._SplayTreeMapNode));
|
| + return this[_getValue](this[_currentNode]);
|
| }
|
| [_findLeftMostDescendent](node) {
|
| + dart.as(node, collection._SplayTreeNode$(K));
|
| while (node != null) {
|
| this[_workList][dartx.add](node);
|
| node = node.left;
|
| }
|
| }
|
| [_rebuildWorkList](currentNode) {
|
| + dart.as(currentNode, collection._SplayTreeNode$(K));
|
| dart.assert(!dart.notNull(this[_workList][dartx.isEmpty]));
|
| this[_workList][dartx.clear]();
|
| if (currentNode == null) {
|
| @@ -23378,12 +23521,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| _SplayTreeIterator[dart.implements] = () => [core.Iterator$(T)];
|
| dart.setSignature(_SplayTreeIterator, {
|
| constructors: () => ({
|
| - _SplayTreeIterator: [collection._SplayTreeIterator$(T), [collection._SplayTree]],
|
| - startAt: [collection._SplayTreeIterator$(T), [collection._SplayTree, dart.dynamic]]
|
| + _SplayTreeIterator: [collection._SplayTreeIterator$(K, T), [collection._SplayTree$(K, collection._SplayTreeNode$(K))]],
|
| + startAt: [collection._SplayTreeIterator$(K, T), [collection._SplayTree$(K, collection._SplayTreeNode$(K)), K]]
|
| }),
|
| methods: () => ({
|
| - [_findLeftMostDescendent]: [dart.void, [collection._SplayTreeNode]],
|
| - [_rebuildWorkList]: [dart.void, [collection._SplayTreeNode]],
|
| + [_findLeftMostDescendent]: [dart.void, [collection._SplayTreeNode$(K)]],
|
| + [_rebuildWorkList]: [dart.void, [collection._SplayTreeNode$(K)]],
|
| moveNext: [core.bool, []]
|
| })
|
| });
|
| @@ -23392,10 +23535,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| collection._SplayTreeIterator = collection._SplayTreeIterator$();
|
| const _copyNode = Symbol('_copyNode');
|
| collection._SplayTreeKeyIterable$ = dart.generic(K => {
|
| - class _SplayTreeKeyIterable extends collection.IterableBase$(K) {
|
| + class _SplayTreeKeyIterable extends core.Iterable$(K) {
|
| _SplayTreeKeyIterable(tree) {
|
| this[_tree] = tree;
|
| - super.IterableBase();
|
| + super.Iterable();
|
| }
|
| get length() {
|
| return this[_tree][_count$];
|
| @@ -23407,8 +23550,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return new (collection._SplayTreeKeyIterator$(K))(this[_tree]);
|
| }
|
| toSet() {
|
| - let setOrMap = this[_tree];
|
| - let set = new (collection.SplayTreeSet$(K))(setOrMap[_comparator], setOrMap[_validKey]);
|
| + let set = new (collection.SplayTreeSet$(K))(this[_tree][_comparator], this[_tree][_validKey]);
|
| set[_count$] = this[_tree][_count$];
|
| set[_root] = set[_copyNode](this[_tree][_root]);
|
| return set;
|
| @@ -23416,7 +23558,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| _SplayTreeKeyIterable[dart.implements] = () => [_internal.EfficientLength];
|
| dart.setSignature(_SplayTreeKeyIterable, {
|
| - constructors: () => ({_SplayTreeKeyIterable: [collection._SplayTreeKeyIterable$(K), [collection._SplayTree$(K)]]}),
|
| + constructors: () => ({_SplayTreeKeyIterable: [collection._SplayTreeKeyIterable$(K), [collection._SplayTree$(K, collection._SplayTreeNode$(K))]]}),
|
| methods: () => ({toSet: [core.Set$(K), []]})
|
| });
|
| dart.defineExtensionMembers(_SplayTreeKeyIterable, ['toSet', 'length', 'isEmpty', 'iterator']);
|
| @@ -23424,10 +23566,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| });
|
| collection._SplayTreeKeyIterable = collection._SplayTreeKeyIterable$();
|
| collection._SplayTreeValueIterable$ = dart.generic((K, V) => {
|
| - class _SplayTreeValueIterable extends collection.IterableBase$(V) {
|
| + class _SplayTreeValueIterable extends core.Iterable$(V) {
|
| _SplayTreeValueIterable(map) {
|
| this[_map$] = map;
|
| - super.IterableBase();
|
| + super.Iterable();
|
| }
|
| get length() {
|
| return this[_map$][_count$];
|
| @@ -23448,39 +23590,42 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| });
|
| collection._SplayTreeValueIterable = collection._SplayTreeValueIterable$();
|
| collection._SplayTreeKeyIterator$ = dart.generic(K => {
|
| - class _SplayTreeKeyIterator extends collection._SplayTreeIterator$(K) {
|
| + class _SplayTreeKeyIterator extends collection._SplayTreeIterator$(K, K) {
|
| _SplayTreeKeyIterator(map) {
|
| super._SplayTreeIterator(map);
|
| }
|
| [_getValue](node) {
|
| - return dart.as(node.key, K);
|
| + dart.as(node, collection._SplayTreeNode$(K));
|
| + return node.key;
|
| }
|
| }
|
| dart.setSignature(_SplayTreeKeyIterator, {
|
| - constructors: () => ({_SplayTreeKeyIterator: [collection._SplayTreeKeyIterator$(K), [collection._SplayTree$(K)]]}),
|
| - methods: () => ({[_getValue]: [K, [collection._SplayTreeNode]]})
|
| + constructors: () => ({_SplayTreeKeyIterator: [collection._SplayTreeKeyIterator$(K), [collection._SplayTree$(K, collection._SplayTreeNode$(K))]]}),
|
| + methods: () => ({[_getValue]: [K, [collection._SplayTreeNode$(K)]]})
|
| });
|
| return _SplayTreeKeyIterator;
|
| });
|
| collection._SplayTreeKeyIterator = collection._SplayTreeKeyIterator$();
|
| collection._SplayTreeValueIterator$ = dart.generic((K, V) => {
|
| - class _SplayTreeValueIterator extends collection._SplayTreeIterator$(V) {
|
| + class _SplayTreeValueIterator extends collection._SplayTreeIterator$(K, V) {
|
| _SplayTreeValueIterator(map) {
|
| super._SplayTreeIterator(map);
|
| }
|
| [_getValue](node) {
|
| - return dart.as(node.value, V);
|
| + dart.as(node, collection._SplayTreeNode$(K));
|
| + let mapNode = dart.as(node, collection._SplayTreeMapNode$(K, V));
|
| + return mapNode.value;
|
| }
|
| }
|
| dart.setSignature(_SplayTreeValueIterator, {
|
| constructors: () => ({_SplayTreeValueIterator: [collection._SplayTreeValueIterator$(K, V), [collection.SplayTreeMap$(K, V)]]}),
|
| - methods: () => ({[_getValue]: [V, [collection._SplayTreeMapNode]]})
|
| + methods: () => ({[_getValue]: [V, [collection._SplayTreeNode$(K)]]})
|
| });
|
| return _SplayTreeValueIterator;
|
| });
|
| collection._SplayTreeValueIterator = collection._SplayTreeValueIterator$();
|
| collection._SplayTreeNodeIterator$ = dart.generic(K => {
|
| - class _SplayTreeNodeIterator extends collection._SplayTreeIterator$(collection._SplayTreeNode$(K)) {
|
| + class _SplayTreeNodeIterator extends collection._SplayTreeIterator$(K, collection._SplayTreeNode$(K)) {
|
| _SplayTreeNodeIterator(tree) {
|
| super._SplayTreeIterator(tree);
|
| }
|
| @@ -23488,28 +23633,37 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| super.startAt(tree, startKey);
|
| }
|
| [_getValue](node) {
|
| - return dart.as(node, collection._SplayTreeNode$(K));
|
| + dart.as(node, collection._SplayTreeNode$(K));
|
| + return node;
|
| }
|
| }
|
| dart.defineNamedConstructor(_SplayTreeNodeIterator, 'startAt');
|
| dart.setSignature(_SplayTreeNodeIterator, {
|
| constructors: () => ({
|
| - _SplayTreeNodeIterator: [collection._SplayTreeNodeIterator$(K), [collection._SplayTree$(K)]],
|
| - startAt: [collection._SplayTreeNodeIterator$(K), [collection._SplayTree$(K), dart.dynamic]]
|
| + _SplayTreeNodeIterator: [collection._SplayTreeNodeIterator$(K), [collection._SplayTree$(K, collection._SplayTreeNode$(K))]],
|
| + startAt: [collection._SplayTreeNodeIterator$(K), [collection._SplayTree$(K, collection._SplayTreeNode$(K)), K]]
|
| }),
|
| - methods: () => ({[_getValue]: [collection._SplayTreeNode$(K), [collection._SplayTreeNode]]})
|
| + methods: () => ({[_getValue]: [collection._SplayTreeNode$(K), [collection._SplayTreeNode$(K)]]})
|
| });
|
| return _SplayTreeNodeIterator;
|
| });
|
| collection._SplayTreeNodeIterator = collection._SplayTreeNodeIterator$();
|
| const _clone = Symbol('_clone');
|
| collection.SplayTreeSet$ = dart.generic(E => {
|
| - class SplayTreeSet extends dart.mixin(collection._SplayTree$(E), collection.IterableMixin$(E), collection.SetMixin$(E)) {
|
| + class SplayTreeSet extends dart.mixin(collection._SplayTree$(E, collection._SplayTreeNode$(E)), collection.IterableMixin$(E), collection.SetMixin$(E)) {
|
| SplayTreeSet(compare, isValidKey) {
|
| if (compare === void 0) compare = null;
|
| if (isValidKey === void 0) isValidKey = null;
|
| - this[_comparator] = dart.as(compare == null ? core.Comparable.compare : compare, core.Comparator$(E));
|
| - this[_validKey] = isValidKey != null ? isValidKey : dart.fn(v => dart.is(v, E), core.bool, [core.Object]);
|
| + this[_dummy] = new (collection._SplayTreeNode$(E))(null);
|
| + this[_comparator] = (() => {
|
| + let l = compare;
|
| + return l != null ? l : dart.as(core.Comparable.compare, core.Comparator$(E));
|
| + })();
|
| + this[_validKey] = (() => {
|
| + let l = isValidKey;
|
| + return l != null ? l : dart.fn(v => dart.is(v, E), core.bool, [dart.dynamic]);
|
| + })();
|
| + this[_root] = null;
|
| super._SplayTree();
|
| }
|
| static from(elements, compare, isValidKey) {
|
| @@ -23517,8 +23671,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| if (isValidKey === void 0) isValidKey = null;
|
| let result = new (collection.SplayTreeSet$(E))(compare, isValidKey);
|
| for (let element of elements) {
|
| - dart.as(element, E);
|
| - result.add(element);
|
| + result.add(dart.as(element, E));
|
| }
|
| return result;
|
| }
|
| @@ -23541,11 +23694,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| get first() {
|
| if (this[_count$] == 0) dart.throw(_internal.IterableElementError.noElement());
|
| - return dart.as(this[_first].key, E);
|
| + return this[_first].key;
|
| }
|
| get last() {
|
| if (this[_count$] == 0) dart.throw(_internal.IterableElementError.noElement());
|
| - return dart.as(this[_last].key, E);
|
| + return this[_last].key;
|
| }
|
| get single() {
|
| if (this[_count$] == 0) dart.throw(_internal.IterableElementError.noElement());
|
| @@ -23553,7 +23706,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return this[_root].key;
|
| }
|
| contains(object) {
|
| - return dart.notNull(this[_validKey](object)) && this[_splay](dart.as(object, E)) == 0;
|
| + return dart.notNull(dart.dcall(this[_validKey], object)) && this[_splay](dart.as(object, E)) == 0;
|
| }
|
| add(element) {
|
| dart.as(element, E);
|
| @@ -23563,7 +23716,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| return true;
|
| }
|
| remove(object) {
|
| - if (!dart.notNull(this[_validKey](object))) return false;
|
| + if (!dart.notNull(dart.dcall(this[_validKey], object))) return false;
|
| return this[_remove](dart.as(object, E)) != null;
|
| }
|
| addAll(elements) {
|
| @@ -23577,7 +23730,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| removeAll(elements) {
|
| for (let element of elements) {
|
| - if (dart.notNull(this[_validKey](element))) this[_remove](dart.as(element, E));
|
| + if (dart.notNull(dart.dcall(this[_validKey], element))) this[_remove](dart.as(element, E));
|
| }
|
| }
|
| retainAll(elements) {
|
| @@ -23587,7 +23740,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| if (modificationCount != this[_modificationCount]) {
|
| dart.throw(new core.ConcurrentModificationError(this));
|
| }
|
| - if (dart.notNull(this[_validKey](object)) && this[_splay](dart.as(object, E)) == 0) retainSet.add(this[_root].key);
|
| + if (dart.notNull(dart.dcall(this[_validKey], object)) && this[_splay](dart.as(object, E)) == 0) {
|
| + retainSet.add(this[_root].key);
|
| + }
|
| }
|
| if (retainSet[_count$] != this[_count$]) {
|
| this[_root] = retainSet[_root];
|
| @@ -23596,7 +23751,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| }
|
| lookup(object) {
|
| - if (!dart.notNull(this[_validKey](object))) return null;
|
| + if (!dart.notNull(dart.dcall(this[_validKey], object))) return null;
|
| let comp = this[_splay](dart.as(object, E));
|
| if (comp != 0) return null;
|
| return this[_root].key;
|
| @@ -23647,8 +23802,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
|
| }
|
| dart.setSignature(SplayTreeSet, {
|
| constructors: () => ({
|
| - SplayTreeSet: [collection.SplayTreeSet$(E), [], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [core.Object])]],
|
| - from: [collection.SplayTreeSet$(E), [core.Iterable], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [core.Object])]]
|
| + SplayTreeSet: [collection.SplayTreeSet$(E), [], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [dart.dynamic])]],
|
| + from: [collection.SplayTreeSet$(E), [core.Iterable], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [dart.dynamic])]]
|
| }),
|
| methods: () => ({
|
| [_compare]: [core.int, [E, E]],
|
|
|