| Index: test/codegen/expect/collection/src/queue_list.js
|
| diff --git a/test/codegen/expect/collection/src/queue_list.js b/test/codegen/expect/collection/src/queue_list.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..66fcecfdffa84eb2360d8efd485fef94e5db4fcd
|
| --- /dev/null
|
| +++ b/test/codegen/expect/collection/src/queue_list.js
|
| @@ -0,0 +1,235 @@
|
| +dart_library.library('collection/src/queue_list', null, /* Imports */[
|
| + 'dart/_runtime',
|
| + 'dart/core',
|
| + 'dart/collection'
|
| +], /* Lazy imports */[
|
| +], function(exports, dart, core, collection) {
|
| + 'use strict';
|
| + let dartx = dart.dartx;
|
| + const _head = Symbol('_head');
|
| + const _tail = Symbol('_tail');
|
| + const _table = Symbol('_table');
|
| + const _add = Symbol('_add');
|
| + const _preGrow = Symbol('_preGrow');
|
| + const _grow = Symbol('_grow');
|
| + const _writeToList = Symbol('_writeToList');
|
| + const QueueList$ = dart.generic(function(E) {
|
| + class QueueList extends dart.mixin(core.Object, collection.ListMixin$(E)) {
|
| + QueueList(initialCapacity) {
|
| + if (initialCapacity === void 0) initialCapacity = null;
|
| + this[_head] = 0;
|
| + this[_tail] = 0;
|
| + this[_table] = null;
|
| + if (initialCapacity == null || dart.notNull(initialCapacity) < dart.notNull(QueueList$()._INITIAL_CAPACITY)) {
|
| + initialCapacity = QueueList$()._INITIAL_CAPACITY;
|
| + } else if (!dart.notNull(QueueList$()._isPowerOf2(initialCapacity))) {
|
| + initialCapacity = QueueList$()._nextPowerOf2(initialCapacity);
|
| + }
|
| + dart.assert(QueueList$()._isPowerOf2(initialCapacity));
|
| + this[_table] = core.List$(E).new(initialCapacity);
|
| + }
|
| + static from(source) {
|
| + if (dart.is(source, core.List)) {
|
| + let length = source[dartx.length];
|
| + let queue = new (QueueList$(E))(dart.notNull(length) + 1);
|
| + dart.assert(dart.notNull(queue[_table][dartx.length]) > dart.notNull(length));
|
| + let sourceList = dart.as(source, core.List);
|
| + queue[_table][dartx.setRange](0, length, dart.as(sourceList, core.Iterable$(E)), 0);
|
| + queue[_tail] = length;
|
| + return queue;
|
| + } else {
|
| + let _ = new (QueueList$(E))();
|
| + _.addAll(source);
|
| + return _;
|
| + }
|
| + }
|
| + add(element) {
|
| + dart.as(element, E);
|
| + this[_add](element);
|
| + }
|
| + addAll(elements) {
|
| + dart.as(elements, core.Iterable$(E));
|
| + if (dart.is(elements, core.List)) {
|
| + let list = dart.as(elements, core.List);
|
| + 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[_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) < dart.notNull(endSpace)) {
|
| + this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
|
| + this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
|
| + } else {
|
| + let preSpace = dart.notNull(addCount) - dart.notNull(endSpace);
|
| + this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(endSpace), dart.as(list, core.Iterable$(E)), 0);
|
| + this[_table][dartx.setRange](0, preSpace, dart.as(list, core.Iterable$(E)), endSpace);
|
| + this[_tail] = preSpace;
|
| + }
|
| + }
|
| + } else {
|
| + for (let element of elements)
|
| + this[_add](element);
|
| + }
|
| + }
|
| + toString() {
|
| + return collection.IterableBase.iterableToFullString(this, "{", "}");
|
| + }
|
| + addLast(element) {
|
| + dart.as(element, E);
|
| + this[_add](element);
|
| + }
|
| + addFirst(element) {
|
| + dart.as(element, E);
|
| + this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table][dartx.length]) - 1;
|
| + this[_table][dartx.set](this[_head], element);
|
| + if (this[_head] == this[_tail]) this[_grow]();
|
| + }
|
| + removeFirst() {
|
| + if (this[_head] == this[_tail]) dart.throw(new core.StateError("No element"));
|
| + let result = this[_table][dartx.get](this[_head]);
|
| + this[_table][dartx.set](this[_head], null);
|
| + this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table][dartx.length]) - 1;
|
| + return result;
|
| + }
|
| + removeLast() {
|
| + if (this[_head] == this[_tail]) dart.throw(new core.StateError("No element"));
|
| + this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table][dartx.length]) - 1;
|
| + let result = this[_table][dartx.get](this[_tail]);
|
| + this[_table][dartx.set](this[_tail], null);
|
| + return result;
|
| + }
|
| + get length() {
|
| + return dart.notNull(this[_tail]) - dart.notNull(this[_head]) & dart.notNull(this[_table][dartx.length]) - 1;
|
| + }
|
| + set length(value) {
|
| + if (dart.notNull(value) < 0) dart.throw(new core.RangeError(`Length ${value} may not be negative.`));
|
| + let delta = dart.notNull(value) - dart.notNull(this.length);
|
| + if (dart.notNull(delta) >= 0) {
|
| + if (dart.notNull(this[_table][dartx.length]) <= dart.notNull(value)) {
|
| + this[_preGrow](value);
|
| + }
|
| + this[_tail] = dart.notNull(this[_tail]) + dart.notNull(delta) & dart.notNull(this[_table][dartx.length]) - 1;
|
| + return;
|
| + }
|
| + let newTail = dart.notNull(this[_tail]) + dart.notNull(delta);
|
| + if (dart.notNull(newTail) >= 0) {
|
| + this[_table][dartx.fillRange](newTail, this[_tail], null);
|
| + } else {
|
| + newTail = dart.notNull(newTail) + dart.notNull(this[_table][dartx.length]);
|
| + this[_table][dartx.fillRange](0, this[_tail], null);
|
| + this[_table][dartx.fillRange](newTail, this[_table][dartx.length], null);
|
| + }
|
| + this[_tail] = newTail;
|
| + }
|
| + get(index) {
|
| + if (dart.notNull(index) < 0 || dart.notNull(index) >= dart.notNull(this.length)) {
|
| + dart.throw(new core.RangeError(`Index ${index} must be in the range [0..${this.length}).`));
|
| + }
|
| + return this[_table][dartx.get](dart.notNull(this[_head]) + dart.notNull(index) & dart.notNull(this[_table][dartx.length]) - 1);
|
| + }
|
| + set(index, value) {
|
| + dart.as(value, E);
|
| + if (dart.notNull(index) < 0 || dart.notNull(index) >= dart.notNull(this.length)) {
|
| + dart.throw(new core.RangeError(`Index ${index} must be in the range [0..${this.length}).`));
|
| + }
|
| + this[_table][dartx.set](dart.notNull(this[_head]) + dart.notNull(index) & dart.notNull(this[_table][dartx.length]) - 1, value);
|
| + return value;
|
| + }
|
| + 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;
|
| + }
|
| + }
|
| + [_add](element) {
|
| + dart.as(element, E);
|
| + this[_table][dartx.set](this[_tail], element);
|
| + this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table][dartx.length]) - 1;
|
| + if (this[_head] == this[_tail]) this[_grow]();
|
| + }
|
| + [_grow]() {
|
| + let newTable = core.List$(E).new(dart.notNull(this[_table][dartx.length]) * 2);
|
| + let split = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_head]);
|
| + newTable[dartx.setRange](0, split, this[_table], this[_head]);
|
| + newTable[dartx.setRange](split, dart.notNull(split) + dart.notNull(this[_head]), this[_table], 0);
|
| + this[_head] = 0;
|
| + this[_tail] = this[_table][dartx.length];
|
| + this[_table] = newTable;
|
| + }
|
| + [_writeToList](target) {
|
| + dart.as(target, core.List$(E));
|
| + dart.assert(dart.notNull(target[dartx.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[dartx.setRange](0, length, this[_table], this[_head]);
|
| + return length;
|
| + } else {
|
| + let firstPartSize = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_head]);
|
| + target[dartx.setRange](0, firstPartSize, this[_table], this[_head]);
|
| + target[dartx.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) + (dart.notNull(newElementCount) >> 1);
|
| + let newCapacity = QueueList$()._nextPowerOf2(newElementCount);
|
| + let newTable = core.List$(E).new(newCapacity);
|
| + this[_tail] = this[_writeToList](newTable);
|
| + this[_table] = newTable;
|
| + this[_head] = 0;
|
| + }
|
| + }
|
| + QueueList[dart.implements] = () => [collection.Queue$(E)];
|
| + dart.setSignature(QueueList, {
|
| + constructors: () => ({
|
| + QueueList: [QueueList$(E), [], [core.int]],
|
| + from: [QueueList$(E), [core.Iterable$(E)]]
|
| + }),
|
| + methods: () => ({
|
| + add: [dart.void, [E]],
|
| + addAll: [dart.void, [core.Iterable$(E)]],
|
| + addLast: [dart.void, [E]],
|
| + addFirst: [dart.void, [E]],
|
| + removeFirst: [E, []],
|
| + removeLast: [E, []],
|
| + get: [E, [core.int]],
|
| + set: [dart.void, [core.int, E]],
|
| + [_add]: [dart.void, [E]],
|
| + [_grow]: [dart.void, []],
|
| + [_writeToList]: [core.int, [core.List$(E)]],
|
| + [_preGrow]: [dart.void, [core.int]]
|
| + }),
|
| + statics: () => ({
|
| + _isPowerOf2: [core.bool, [core.int]],
|
| + _nextPowerOf2: [core.int, [core.int]]
|
| + }),
|
| + names: ['_isPowerOf2', '_nextPowerOf2']
|
| + });
|
| + dart.defineExtensionMembers(QueueList, [
|
| + 'add',
|
| + 'addAll',
|
| + 'toString',
|
| + 'removeLast',
|
| + 'get',
|
| + 'set',
|
| + 'length',
|
| + 'length'
|
| + ]);
|
| + return QueueList;
|
| + });
|
| + const QueueList = QueueList$();
|
| + QueueList._INITIAL_CAPACITY = 8;
|
| + // Exports:
|
| + exports.QueueList$ = QueueList$;
|
| + exports.QueueList = QueueList;
|
| +});
|
|
|