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

Unified Diff: pkg/compiler/lib/src/js_backend/enqueuer.dart

Issue 2289353003: Make Enqueuer a pure interface. (Closed)
Patch Set: Created 4 years, 4 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/js_backend/enqueuer.dart
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 2d6d8d514d62c258be70923cb91b300790603135..ba7f2d24e81e5ff5c675a1ad30514e89ff76dee0 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -9,20 +9,17 @@ import 'dart:collection' show Queue;
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;
-import '../common/work.dart' show ItemCompilationContext, WorkItem;
+import '../common/work.dart' show WorkItem;
import '../common.dart';
import '../compiler.dart' show Compiler;
import '../dart_types.dart' show DartType, InterfaceType;
import '../elements/elements.dart'
show
- AnalyzableElement,
- AstElement,
ClassElement,
ConstructorElement,
Element,
Elements,
+ Entity,
FunctionElement,
LibraryElement,
Member,
@@ -30,7 +27,7 @@ import '../elements/elements.dart'
Name,
TypedElement,
TypedefElement;
-import '../enqueue.dart' as enqueue;
+import '../enqueue.dart';
import '../js/js.dart' as js;
import '../native/native.dart' as native;
import '../types/types.dart' show TypeMaskStrategy;
@@ -42,11 +39,12 @@ import '../universe/world_impact.dart'
show ImpactUseCase, WorldImpact, WorldImpactVisitor;
import '../util/util.dart' show Setlet;
-abstract class _Enqueuer implements enqueue.Enqueuer {
+/// [Enqueuer] which is specific to code generation.
+class CodegenEnqueuer implements Enqueuer {
final String name;
final Compiler compiler; // TODO(ahe): Remove this dependency.
- final enqueue.EnqueuerStrategy strategy;
- final enqueue.ItemCompilationContextCreator itemCompilationContextCreator;
+ final EnqueuerStrategy strategy;
+ final ItemCompilationContextCreator itemCompilationContextCreator;
final Map<String, Set<Element>> instanceMembersByName =
new Map<String, Set<Element>>();
final Map<String, Set<Element>> instanceFunctionsByName =
@@ -59,7 +57,7 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
const bool.fromEnvironment("TRACE_MIRROR_ENQUEUING");
bool queueIsClosed = false;
- enqueue.EnqueueTask task;
+ EnqueueTask task;
native.NativeEnqueuer nativeEnqueuer; // Set by EnqueueTask
bool hasEnqueuedReflectiveElements = false;
@@ -67,33 +65,32 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
WorldImpactVisitor impactVisitor;
- _Enqueuer(this.name, this.compiler, this.itemCompilationContextCreator,
- this.strategy) {
+ CodegenEnqueuer(
+ Compiler compiler, this.itemCompilationContextCreator, this.strategy)
+ : queue = new Queue<CodegenWorkItem>(),
+ newlyEnqueuedElements = compiler.cacheStrategy.newSet(),
+ newlySeenSelectors = compiler.cacheStrategy.newSet(),
+ this.name = 'codegen enqueuer',
+ this.compiler = compiler {
impactVisitor = new _EnqueuerImpactVisitor(this);
}
// TODO(johnniwinther): Move this to [ResolutionEnqueuer].
Resolution get resolution => compiler.resolution;
- Queue<WorkItem> get queue;
bool get queueIsEmpty => queue.isEmpty;
/// Returns [:true:] if this enqueuer is the resolution enqueuer.
bool get isResolutionQueue => false;
- enqueue.QueueFilter get filter => compiler.enqueuerFilter;
+ QueueFilter get filter => compiler.enqueuerFilter;
DiagnosticReporter get reporter => compiler.reporter;
- /// Returns [:true:] if [member] has been processed by this enqueuer.
- bool isProcessed(Element member);
-
bool isClassProcessed(ClassElement cls) => _processedClasses.contains(cls);
Iterable<ClassElement> get processedClasses => _processedClasses;
- ImpactUseCase get impactUse;
-
/**
* Documentation wanted -- johnniwinther
*
@@ -109,13 +106,6 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
}
}
- /**
- * Adds [element] to the work list if it has not already been processed.
- *
- * Returns [true] if the element was actually added to the queue.
- */
- bool internalAddToWorkList(Element element);
-
/// Apply the [worldImpact] of processing [element] to this enqueuer.
void applyImpact(Element element, WorldImpact worldImpact) {
compiler.impactStrategy
@@ -236,8 +226,6 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
.add(member);
}
- void registerNoSuchMethod(Element noSuchMethod);
-
void enableIsolateSupport() {}
void processInstantiatedClass(ClassElement cls) {
@@ -290,16 +278,6 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
});
}
- /**
- * Decides whether an element should be included to satisfy requirements
- * of the mirror system. [includedEnclosing] provides a hint whether the
- * enclosing element was included.
- *
- * The actual implementation depends on the current compiler phase.
- */
- bool shouldIncludeElementDueToMirrors(Element element,
- {bool includedEnclosing});
-
void logEnqueueReflectiveAction(action, [msg = ""]) {
if (TRACE_MIRROR_ENQUEUING) {
print("MIRROR_ENQUEUE (${isResolutionQueue ? "R" : "C"}): $action $msg");
@@ -490,7 +468,7 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
processSet(instanceFunctionsByName, n, f);
}
- void handleUnseenSelector(DynamicUse universeSelector) {
+ void _handleUnseenSelector(DynamicUse universeSelector) {
strategy.processDynamicUse(this, universeSelector);
}
@@ -630,21 +608,15 @@ abstract class _Enqueuer implements enqueue.Enqueuer {
nativeEnqueuer.logSummary(log);
}
- /// Log summary specific to the concrete enqueuer.
- void _logSpecificSummary(log(message));
-
String toString() => 'Enqueuer($name)';
- void forgetElement(Element element) {
+ void _forgetElement(Element element) {
universe.forgetElement(element, compiler);
_processedClasses.remove(element);
instanceMembersByName[element.name]?.remove(element);
instanceFunctionsByName[element.name]?.remove(element);
}
-}
-/// [Enqueuer] which is specific to code generation.
-class CodegenEnqueuer extends _Enqueuer implements enqueue.CodegenEnqueuer {
final Queue<CodegenWorkItem> queue;
final Map<Element, js.Expression> generatedCode = <Element, js.Expression>{};
@@ -659,16 +631,6 @@ class CodegenEnqueuer extends _Enqueuer implements enqueue.CodegenEnqueuer {
ImpactUseCase get impactUse => IMPACT_USE;
- CodegenEnqueuer(
- Compiler compiler,
- ItemCompilationContext itemCompilationContextCreator(),
- enqueue.EnqueuerStrategy strategy)
- : queue = new Queue<CodegenWorkItem>(),
- newlyEnqueuedElements = compiler.cacheStrategy.newSet(),
- newlySeenSelectors = compiler.cacheStrategy.newSet(),
- super('codegen enqueuer', compiler, itemCompilationContextCreator,
- strategy);
-
bool isProcessed(Element member) =>
member.isAbstract || generatedCode.containsKey(member);
@@ -684,6 +646,11 @@ class CodegenEnqueuer extends _Enqueuer implements enqueue.CodegenEnqueuer {
return compiler.backend.isAccessibleByReflection(element);
}
+ /**
+ * Adds [element] to the work list if it has not already been processed.
+ *
+ * Returns [true] if the element was actually added to the queue.
+ */
bool internalAddToWorkList(Element element) {
// Don't generate code for foreign elements.
if (compiler.backend.isForeign(element)) return false;
@@ -723,7 +690,7 @@ class CodegenEnqueuer extends _Enqueuer implements enqueue.CodegenEnqueuer {
}
void forgetElement(Element element) {
- super.forgetElement(element);
+ _forgetElement(element);
generatedCode.remove(element);
if (element is MemberElement) {
for (Element closure in element.nestedClosures) {
@@ -738,8 +705,11 @@ class CodegenEnqueuer extends _Enqueuer implements enqueue.CodegenEnqueuer {
if (compiler.options.hasIncrementalSupport) {
newlySeenSelectors.add(dynamicUse);
}
- super.handleUnseenSelector(dynamicUse);
+ _handleUnseenSelector(dynamicUse);
}
+
+ @override
+ Iterable<Entity> get processedEntities => generatedCode.keys;
}
void removeFromSet(Map<String, Set<Element>> map, Element element) {
@@ -749,7 +719,7 @@ void removeFromSet(Map<String, Set<Element>> map, Element element) {
}
class _EnqueuerImpactVisitor implements WorldImpactVisitor {
- final _Enqueuer enqueuer;
+ final CodegenEnqueuer enqueuer;
_EnqueuerImpactVisitor(this.enqueuer);
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698