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

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

Issue 2742283002: Add ConstantUse to WorldImpact (Closed)
Patch Set: Cleanup. Created 3 years, 9 months 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
Index: pkg/compiler/lib/src/enqueue.dart
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index 3bc0cc0a5c05db8fca1f61c203d39dea7f225e31..a771b2a8dd41e2198c5cf27f39efd1c6653b72bf 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -10,6 +10,7 @@ import 'common/resolution.dart' show Resolution;
import 'common/tasks.dart' show CompilerTask;
import 'common/work.dart' show WorkItem;
import 'common.dart';
+import 'constants/values.dart';
import 'compiler.dart' show Compiler;
import 'options.dart';
import 'elements/elements.dart'
@@ -19,7 +20,13 @@ import 'elements/resolution_types.dart' show ResolutionTypedefType;
import 'elements/types.dart';
import 'universe/world_builder.dart';
import 'universe/use.dart'
- show DynamicUse, StaticUse, StaticUseKind, TypeUse, TypeUseKind;
+ show
+ ConstantUse,
+ DynamicUse,
+ StaticUse,
+ StaticUseKind,
+ TypeUse,
+ TypeUseKind;
import 'universe/world_impact.dart'
show ImpactStrategy, ImpactUseCase, WorldImpact, WorldImpactVisitor;
import 'util/enumset.dart';
@@ -115,6 +122,10 @@ abstract class EnqueuerListener {
/// backend specific [WorldImpact] of this is returned.
WorldImpact registerUsedElement(MemberEntity member);
+ /// Called to register that [value] is statically known to be used. Any
+ /// backend specific [WorldImpact] of this is returned.
+ WorldImpact registerUsedConstant(ConstantValue value);
+
void onQueueOpen(Enqueuer enqueuer, FunctionEntity mainMethod,
Iterable<LibraryEntity> libraries);
@@ -147,6 +158,7 @@ abstract class EnqueuerImpl extends Enqueuer {
void processStaticUse(StaticUse staticUse);
void processTypeUse(TypeUse typeUse);
void processDynamicUse(DynamicUse dynamicUse);
+ void processConstantUse(ConstantUse constantUse);
EnqueuerListener get listener;
// TODO(johnniwinther): Initialize [_impactStrategy] to `null`.
@@ -179,6 +191,7 @@ class ResolutionEnqueuer extends EnqueuerImpl {
final EnqueuerStrategy strategy;
final Set<ClassEntity> _recentClasses = new Setlet<ClassEntity>();
+ bool _recentConstants = false;
final ResolutionEnqueuerWorldBuilder _worldBuilder;
final WorkItemBuilder _workItemBuilder;
final DiagnosticReporter _reporter;
@@ -286,6 +299,15 @@ class ResolutionEnqueuer extends EnqueuerImpl {
});
}
+ void processConstantUse(ConstantUse constantUse) {
+ task.measure(() {
+ if (_worldBuilder.registerConstantUse(constantUse)) {
+ applyImpact(listener.registerUsedConstant(constantUse.value));
+ _recentConstants = true;
+ }
+ });
+ }
+
void processStaticUse(StaticUse staticUse) {
_worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
// TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
@@ -362,10 +384,12 @@ class ResolutionEnqueuer extends EnqueuerImpl {
}
List recents = _recentClasses.toList(growable: false);
_recentClasses.clear();
+ _recentConstants = false;
if (!_onQueueEmpty(recents)) {
_recentClasses.addAll(recents);
}
- } while (_queue.isNotEmpty || _recentClasses.isNotEmpty);
+ } while (
+ _queue.isNotEmpty || _recentClasses.isNotEmpty || _recentConstants);
}
void logSummary(void log(String message)) {
@@ -466,6 +490,9 @@ class EnqueuerStrategy {
/// Process a dynamic use for a call site in live code.
void processDynamicUse(EnqueuerImpl enqueuer, DynamicUse dynamicUse) {}
+ /// Process a constant use in live code.
+ void processConstantUse(EnqueuerImpl enqueuer, ConstantUse constantUse) {}
+
/// Check enqueuer consistency after the queue has been closed.
bool checkEnqueuerConsistency(EnqueuerImpl enqueuer) => true;
@@ -504,6 +531,11 @@ class TreeShakingEnqueuerStrategy extends EnqueuerStrategy {
enqueuer.processDynamicUse(dynamicUse);
}
+ @override
+ void processConstantUse(EnqueuerImpl enqueuer, ConstantUse constantUse) {
+ enqueuer.processConstantUse(constantUse);
+ }
+
/// Check enqueuer consistency after the queue has been closed.
bool checkEnqueuerConsistency(EnqueuerImpl enqueuer) {
enqueuer.task.measure(() {
@@ -540,6 +572,11 @@ class EnqueuerImplImpactVisitor implements WorldImpactVisitor {
void visitTypeUse(TypeUse typeUse) {
enqueuer.strategy.processTypeUse(enqueuer, typeUse);
}
+
+ @override
+ void visitConstantUse(ConstantUse constantUse) {
+ enqueuer.strategy.processConstantUse(enqueuer, constantUse);
+ }
}
typedef void DeferredActionFunction();

Powered by Google App Engine
This is Rietveld 408576698