| Index: pkg/compiler/lib/src/enqueue.dart
|
| diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
|
| index fcc594c86760ee137f7cdb8c9af6e0576701739c..d803bc5143bbed78fb4ff766005561735f925f30 100644
|
| --- a/pkg/compiler/lib/src/enqueue.dart
|
| +++ b/pkg/compiler/lib/src/enqueue.dart
|
| @@ -10,11 +10,11 @@ import 'common/resolution.dart' show Resolution;
|
| import 'common/tasks.dart' show CompilerTask;
|
| import 'common/work.dart' show WorkItem;
|
| import 'common.dart';
|
| +import 'common_elements.dart' show ElementEnvironment;
|
| import 'constants/values.dart';
|
| import 'compiler.dart' show Compiler;
|
| import 'options.dart';
|
| -import 'elements/elements.dart'
|
| - show AnalyzableElement, ClassElement, MemberElement;
|
| +import 'elements/elements.dart' show AnalyzableElement, MemberElement;
|
| import 'elements/entities.dart';
|
| import 'elements/resolution_types.dart' show ResolutionTypedefType;
|
| import 'elements/types.dart';
|
| @@ -85,7 +85,8 @@ abstract class Enqueuer {
|
| /// provided the impact strategy will remove it from the element impact cache,
|
| /// if it is no longer needed.
|
| void applyImpact(WorldImpact worldImpact, {var impactSource});
|
| - bool checkNoEnqueuedInvokedInstanceMethods();
|
| + bool checkNoEnqueuedInvokedInstanceMethods(
|
| + ElementEnvironment elementEnvironment);
|
|
|
| /// Check the enqueuer queue is empty or fail otherwise.
|
| void checkQueueIsEmpty();
|
| @@ -255,8 +256,9 @@ class ResolutionEnqueuer extends EnqueuerImpl {
|
| });
|
| }
|
|
|
| - bool checkNoEnqueuedInvokedInstanceMethods() {
|
| - return strategy.checkEnqueuerConsistency(this);
|
| + bool checkNoEnqueuedInvokedInstanceMethods(
|
| + ElementEnvironment elementEnvironment) {
|
| + return strategy.checkEnqueuerConsistency(this, elementEnvironment);
|
| }
|
|
|
| void checkClass(ClassEntity cls) {
|
| @@ -506,7 +508,9 @@ class EnqueuerStrategy {
|
| void processConstantUse(EnqueuerImpl enqueuer, ConstantUse constantUse) {}
|
|
|
| /// Check enqueuer consistency after the queue has been closed.
|
| - bool checkEnqueuerConsistency(EnqueuerImpl enqueuer) => true;
|
| + bool checkEnqueuerConsistency(
|
| + EnqueuerImpl enqueuer, ElementEnvironment elementEnvironment) =>
|
| + true;
|
|
|
| /// Process [work] using [f].
|
| void processWorkItem(void f(WorkItem work), WorkItem work) {
|
| @@ -549,14 +553,15 @@ class TreeShakingEnqueuerStrategy extends EnqueuerStrategy {
|
| }
|
|
|
| /// Check enqueuer consistency after the queue has been closed.
|
| - bool checkEnqueuerConsistency(EnqueuerImpl enqueuer) {
|
| + bool checkEnqueuerConsistency(
|
| + EnqueuerImpl enqueuer, ElementEnvironment elementEnvironment) {
|
| enqueuer.task.measure(() {
|
| // Run through the classes and see if we need to enqueue more methods.
|
| - for (ClassElement classElement
|
| + for (ClassEntity classElement
|
| in enqueuer.worldBuilder.directlyInstantiatedClasses) {
|
| - for (ClassElement currentClass = classElement;
|
| + for (ClassEntity currentClass = classElement;
|
| currentClass != null;
|
| - currentClass = currentClass.superclass) {
|
| + currentClass = elementEnvironment.getSuperClass(currentClass)) {
|
| enqueuer.checkClass(currentClass);
|
| }
|
| }
|
|
|