Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(890)

Unified Diff: pkg/compiler/lib/src/enqueue.dart

Issue 2558013002: Move handling of regular static use from ResolutionEnqueuer to ResolutionWorldBuilderImpl (Closed)
Patch Set: Updated cf. comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/deferred_load.dart ('k') | pkg/compiler/lib/src/universe/world_builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/enqueue.dart
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index 74fb12463b7d3b5ca5ba42d2bb5a2d17613e8c18..2176fd3c50f7612eddfa333c5029dd5a39f25fa5 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -271,34 +271,21 @@ class ResolutionEnqueuer extends EnqueuerImpl {
});
}
+ /// Callback for applying the use of a [member].
+ void _applyStaticMemberUse(Entity member, EnumSet<MemberUse> useSet) {
+ if (useSet.contains(MemberUse.NORMAL)) {
+ _addToWorkList(member);
+ }
+ if (useSet.contains(MemberUse.CLOSURIZE)) {
+ applyImpact(backend.registerGetOfStaticFunction());
+ }
+ }
+
void processStaticUse(StaticUse staticUse) {
- Element element = staticUse.element;
- assert(invariant(element, element.isDeclaration,
- message: "Element ${element} is not the declaration."));
- _universe.registerStaticUse(staticUse);
- bool addElement = true;
+ _universe.registerStaticUse(staticUse, _applyStaticMemberUse);
+ // TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
+ // for these:
switch (staticUse.kind) {
- case StaticUseKind.STATIC_TEAR_OFF:
- applyImpact(backend.registerGetOfStaticFunction());
- break;
- case StaticUseKind.FIELD_GET:
- case StaticUseKind.FIELD_SET:
- case StaticUseKind.CLOSURE:
- // TODO(johnniwinther): Avoid this. Currently [FIELD_GET] and
- // [FIELD_SET] contains [BoxFieldElement]s which we cannot enqueue.
- // Also [CLOSURE] contains [LocalFunctionElement] which we cannot
- // enqueue.
- LocalFunctionElement closure = staticUse.element;
- if (closure.type.containsTypeVariables) {
- _universe.closuresWithFreeTypeVariables.add(closure);
- }
- addElement = false;
- break;
- case StaticUseKind.SUPER_FIELD_SET:
- case StaticUseKind.SUPER_TEAR_OFF:
- case StaticUseKind.GENERAL:
- case StaticUseKind.DIRECT_USE:
- break;
case StaticUseKind.CONSTRUCTOR_INVOKE:
case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
_registerInstantiatedType(staticUse.type,
@@ -310,14 +297,9 @@ class ResolutionEnqueuer extends EnqueuerImpl {
globalDependency: false,
isRedirection: true);
break;
- case StaticUseKind.DIRECT_INVOKE:
- invariant(
- element, 'Direct static use is not supported for resolution.');
+ default:
break;
}
- if (addElement) {
- _addToWorkList(element);
- }
}
void processTypeUse(TypeUse typeUse) {
@@ -381,7 +363,7 @@ class ResolutionEnqueuer extends EnqueuerImpl {
WorkItem work = _queue.removeLast();
if (!_processedElements.contains(work.element)) {
strategy.processWorkItem(f, work);
- registerProcessedElement(work.element);
+ _processedElements.add(work.element);
}
}
List recents = _recentClasses.toList(growable: false);
@@ -406,12 +388,16 @@ class ResolutionEnqueuer extends EnqueuerImpl {
bool get isResolutionQueue => true;
/// Returns `true` if [element] has been processed by the resolution enqueuer.
+ // TODO(johnniwinther): Move this to the [OpenWorld]/[ResolutionWorldBuilder].
bool hasBeenProcessed(Element element) {
- return _processedElements.contains(element.analyzableElement.declaration);
+ assert(invariant(element, element == element.analyzableElement.declaration,
+ message: "Unexpected element $element"));
+ return _processedElements.contains(element);
}
- /// Registers [element] as processed by the resolution enqueuer.
- void registerProcessedElement(AstElement element) {
+ /// Registers [element] as processed by the resolution enqueuer. Used only for
+ /// testing.
+ void registerProcessedElementInternal(AstElement element) {
_processedElements.add(element);
}
« no previous file with comments | « pkg/compiler/lib/src/deferred_load.dart ('k') | pkg/compiler/lib/src/universe/world_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698