| Index: pkg/compiler/lib/src/enqueue.dart
|
| diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
|
| index 8963fb3b6256f6f4c50db6f1ba687171fec877c2..3bc0cc0a5c05db8fca1f61c203d39dea7f225e31 100644
|
| --- a/pkg/compiler/lib/src/enqueue.dart
|
| +++ b/pkg/compiler/lib/src/enqueue.dart
|
| @@ -34,10 +34,12 @@ class EnqueueTask extends CompilerTask {
|
|
|
| EnqueueTask(Compiler compiler)
|
| : this.compiler = compiler,
|
| - super(compiler.measurer) {
|
| - createResolutionEnqueuer();
|
| - }
|
| + super(compiler.measurer);
|
| +
|
| + // TODO(johnniwinther): Remove the need for this.
|
| + bool get hasResolution => _resolution != null;
|
|
|
| + // TODO(johnniwinther): Remove the need for this.
|
| ResolutionEnqueuer get resolution {
|
| assert(invariant(NO_LOCATION_SPANNABLE, _resolution != null,
|
| message: "ResolutionEnqueuer has not been created yet."));
|
| @@ -192,7 +194,7 @@ class ResolutionEnqueuer extends EnqueuerImpl {
|
|
|
| /// Queue of deferred resolution actions to execute when the resolution queue
|
| /// has been emptied.
|
| - final Queue<_DeferredAction> _deferredQueue = new Queue<_DeferredAction>();
|
| + final Queue<DeferredAction> _deferredQueue = new Queue<DeferredAction>();
|
|
|
| ResolutionEnqueuer(this.task, this._options, this._reporter, this.strategy,
|
| this.listener, this._worldBuilder, this._workItemBuilder,
|
| @@ -415,14 +417,18 @@ class ResolutionEnqueuer extends EnqueuerImpl {
|
| /// emptied.
|
| ///
|
| /// The queue is processed in FIFO order.
|
| - void addDeferredAction(Entity entity, void action()) {
|
| + void addDeferredAction(DeferredAction deferredAction) {
|
| if (queueIsClosed) {
|
| throw new SpannableAssertionFailure(
|
| - entity,
|
| + deferredAction.element,
|
| "Resolution work list is closed. "
|
| - "Trying to add deferred action for $entity");
|
| + "Trying to add deferred action for ${deferredAction.element}");
|
| }
|
| - _deferredQueue.add(new _DeferredAction(entity, action));
|
| + _deferredQueue.add(deferredAction);
|
| + }
|
| +
|
| + void addDeferredActions(Iterable<DeferredAction> deferredActions) {
|
| + deferredActions.forEach(addDeferredAction);
|
| }
|
|
|
| /// [_onQueueEmpty] is called whenever the queue is drained. [recentClasses]
|
| @@ -441,7 +447,7 @@ class ResolutionEnqueuer extends EnqueuerImpl {
|
|
|
| void _emptyDeferredQueue() {
|
| while (!_deferredQueue.isEmpty) {
|
| - _DeferredAction task = _deferredQueue.removeFirst();
|
| + DeferredAction task = _deferredQueue.removeFirst();
|
| _reporter.withCurrentElement(task.element, task.action);
|
| }
|
| }
|
| @@ -536,13 +542,13 @@ class EnqueuerImplImpactVisitor implements WorldImpactVisitor {
|
| }
|
| }
|
|
|
| -typedef void _DeferredActionFunction();
|
| +typedef void DeferredActionFunction();
|
|
|
| -class _DeferredAction {
|
| +class DeferredAction {
|
| final Entity element;
|
| - final _DeferredActionFunction action;
|
| + final DeferredActionFunction action;
|
|
|
| - _DeferredAction(this.element, this.action);
|
| + DeferredAction(this.element, this.action);
|
| }
|
|
|
| /// Interface for creating work items for enqueued member entities.
|
|
|