| Index: pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
|
| index 807bcb95cedcb12c590189f40c2386ecb0c40a4c..d87ffa31d799423bb20367af7aa405e49855964b 100644
|
| --- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
|
| @@ -71,10 +71,11 @@ class CustomElementsAnalysis {
|
| codegenJoin.allClassesSelected = true;
|
| }
|
|
|
| - CustomElementsAnalysisJoin joinFor(Enqueuer enqueuer) =>
|
| - enqueuer.isResolutionQueue ? resolutionJoin : codegenJoin;
|
| + CustomElementsAnalysisJoin joinFor({bool forResolution}) =>
|
| + forResolution ? resolutionJoin : codegenJoin;
|
|
|
| - void registerInstantiatedClass(ClassElement classElement, Enqueuer enqueuer) {
|
| + void registerInstantiatedClass(ClassElement classElement,
|
| + {bool forResolution}) {
|
| classElement.ensureResolved(compiler.resolution);
|
| if (!backend.isNativeOrExtendsNative(classElement)) return;
|
| if (classElement.isMixinApplication) return;
|
| @@ -82,7 +83,7 @@ class CustomElementsAnalysis {
|
| // JsInterop classes are opaque interfaces without a concrete
|
| // implementation.
|
| if (backend.isJsInterop(classElement)) return;
|
| - joinFor(enqueuer).instantiatedClasses.add(classElement);
|
| + joinFor(forResolution: forResolution).instantiatedClasses.add(classElement);
|
| }
|
|
|
| void registerTypeLiteral(DartType type) {
|
| @@ -104,19 +105,20 @@ class CustomElementsAnalysis {
|
| codegenJoin.selectedClasses.add(element);
|
| }
|
|
|
| - void registerStaticUse(Element element, Enqueuer enqueuer) {
|
| + void registerStaticUse(Element element, {bool forResolution}) {
|
| assert(element != null);
|
| if (!fetchedTableAccessorMethod) {
|
| fetchedTableAccessorMethod = true;
|
| tableAccessorMethod = backend.helpers.findIndexForNativeSubclassType;
|
| }
|
| if (element == tableAccessorMethod) {
|
| - joinFor(enqueuer).demanded = true;
|
| + joinFor(forResolution: forResolution).demanded = true;
|
| }
|
| }
|
|
|
| - void onQueueEmpty(Enqueuer enqueuer) {
|
| - joinFor(enqueuer).flush(enqueuer);
|
| + /// Computes the [WorldImpact] of the classes registered since last flush.
|
| + WorldImpact flush({bool forResolution}) {
|
| + return joinFor(forResolution: forResolution).flush();
|
| }
|
|
|
| bool get needsTable => codegenJoin.demanded;
|
| @@ -152,8 +154,8 @@ class CustomElementsAnalysisJoin {
|
|
|
| CustomElementsAnalysisJoin(this.backend);
|
|
|
| - void flush(Enqueuer enqueuer) {
|
| - if (!demanded) return;
|
| + WorldImpact flush() {
|
| + if (!demanded) return const WorldImpact();
|
| var newActiveClasses = new Set<ClassElement>();
|
| for (ClassElement classElement in instantiatedClasses) {
|
| bool isNative = backend.isNative(classElement);
|
| @@ -168,7 +170,8 @@ class CustomElementsAnalysisJoin {
|
| Iterable<ConstructorElement> escapingConstructors =
|
| computeEscapingConstructors(classElement);
|
| for (ConstructorElement constructor in escapingConstructors) {
|
| - enqueuer.registerStaticUse(new StaticUse.foreignUse(constructor));
|
| + impactBuilder
|
| + .registerStaticUse(new StaticUse.foreignUse(constructor));
|
| }
|
| escapingConstructors
|
| .forEach(compiler.globalDependencies.registerDependency);
|
| @@ -182,7 +185,7 @@ class CustomElementsAnalysisJoin {
|
| }
|
| activeClasses.addAll(newActiveClasses);
|
| instantiatedClasses.removeAll(newActiveClasses);
|
| - enqueuer.applyImpact(null, impactBuilder.flush());
|
| + return impactBuilder.flush();
|
| }
|
|
|
| TypeConstantValue makeTypeConstant(ClassElement element) {
|
|
|