| Index: pkg/compiler/lib/src/enqueue.dart
|
| diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
|
| index f619520adef080da96da34cdac3c4a4add5f5534..29ae8ea4bf6c57ea145bff92b1a3d85aba559c2a 100644
|
| --- a/pkg/compiler/lib/src/enqueue.dart
|
| +++ b/pkg/compiler/lib/src/enqueue.dart
|
| @@ -10,7 +10,7 @@ import 'common/codegen.dart' show CodegenWorkItem;
|
| import 'common/names.dart' show Identifiers;
|
| import 'common/resolution.dart' show Resolution;
|
| import 'common/resolution.dart' show ResolutionWorkItem;
|
| -import 'common/tasks.dart' show CompilerTask, DeferredAction, DeferredTask;
|
| +import 'common/tasks.dart' show CompilerTask;
|
| import 'common/work.dart' show ItemCompilationContext, WorkItem;
|
| import 'common.dart';
|
| import 'compiler.dart' show Compiler;
|
| @@ -46,11 +46,13 @@ typedef ItemCompilationContext ItemCompilationContextCreator();
|
| class EnqueueTask extends CompilerTask {
|
| final ResolutionEnqueuer resolution;
|
| final CodegenEnqueuer codegen;
|
| + final Compiler compiler;
|
|
|
| String get name => 'Enqueue';
|
|
|
| EnqueueTask(Compiler compiler)
|
| - : resolution = new ResolutionEnqueuer(
|
| + : compiler = compiler,
|
| + resolution = new ResolutionEnqueuer(
|
| compiler,
|
| compiler.backend.createItemCompilationContext,
|
| compiler.options.analyzeOnly && compiler.options.analyzeMain
|
| @@ -60,7 +62,7 @@ class EnqueueTask extends CompilerTask {
|
| compiler,
|
| compiler.backend.createItemCompilationContext,
|
| const TreeShakingEnqueuerStrategy()),
|
| - super(compiler) {
|
| + super(compiler.measurer) {
|
| codegen.task = this;
|
| resolution.task = this;
|
|
|
| @@ -714,11 +716,9 @@ class ResolutionEnqueuer extends Enqueuer {
|
|
|
| final Queue<ResolutionWorkItem> queue;
|
|
|
| - /**
|
| - * A deferred task queue for the resolution phase which is processed
|
| - * when the resolution queue has been emptied.
|
| - */
|
| - final Queue<DeferredTask> deferredTaskQueue;
|
| + /// Queue of deferred resolution actions to execute when the resolution queue
|
| + /// has been emptied.
|
| + final Queue<_DeferredAction> deferredQueue;
|
|
|
| static const ImpactUseCase IMPACT_USE =
|
| const ImpactUseCase('ResolutionEnqueuer');
|
| @@ -733,7 +733,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| strategy),
|
| processedElements = new Set<AstElement>(),
|
| queue = new Queue<ResolutionWorkItem>(),
|
| - deferredTaskQueue = new Queue<DeferredTask>();
|
| + deferredQueue = new Queue<_DeferredAction>();
|
|
|
| bool get isResolutionQueue => true;
|
|
|
| @@ -831,24 +831,26 @@ class ResolutionEnqueuer extends Enqueuer {
|
| *
|
| * The queue is processed in FIFO order.
|
| */
|
| - void addDeferredAction(Element element, DeferredAction action) {
|
| + void addDeferredAction(Element element, void action()) {
|
| if (queueIsClosed) {
|
| throw new SpannableAssertionFailure(
|
| element,
|
| "Resolution work list is closed. "
|
| "Trying to add deferred action for $element");
|
| }
|
| - deferredTaskQueue.add(new DeferredTask(element, action));
|
| + deferredQueue.add(new _DeferredAction(element, action));
|
| }
|
|
|
| bool onQueueEmpty(Iterable<ClassElement> recentClasses) {
|
| - emptyDeferredTaskQueue();
|
| + _emptyDeferredQueue();
|
| return super.onQueueEmpty(recentClasses);
|
| }
|
|
|
| - void emptyDeferredTaskQueue() {
|
| - while (!deferredTaskQueue.isEmpty) {
|
| - DeferredTask task = deferredTaskQueue.removeFirst();
|
| + void emptyDeferredQueueForTesting() => _emptyDeferredQueue();
|
| +
|
| + void _emptyDeferredQueue() {
|
| + while (!deferredQueue.isEmpty) {
|
| + _DeferredAction task = deferredQueue.removeFirst();
|
| reporter.withCurrentElement(task.element, task.action);
|
| }
|
| }
|
| @@ -1044,3 +1046,12 @@ class _EnqueuerImpactVisitor implements WorldImpactVisitor {
|
| enqueuer.registerTypeUse(typeUse);
|
| }
|
| }
|
| +
|
| +typedef void _DeferredActionFunction();
|
| +
|
| +class _DeferredAction {
|
| + final Element element;
|
| + final _DeferredActionFunction action;
|
| +
|
| + _DeferredAction(this.element, this.action);
|
| +}
|
|
|