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

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

Issue 2589183002: Move CodegenEnqueuer.generatedCode to JavaScriptBackend. (Closed)
Patch Set: dartfmt 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/js_backend/backend.dart ('k') | tests/compiler/dart2js/mirrors_used_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 673d186adcd58f3a2c891b9e6ca9d5883fa5a7e3..ae34a58f850a8cb3104359b86ed24136534c7318 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -14,11 +14,9 @@ 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 ClassElement, Element, Entity, MemberElement, TypedElement;
+import '../elements/elements.dart' show Element, Entity, TypedElement;
import '../elements/entities.dart';
import '../enqueue.dart';
-import '../js/js.dart' as js;
import '../native/native.dart' as native;
import '../options.dart';
import '../types/types.dart' show TypeMaskStrategy;
@@ -35,7 +33,7 @@ class CodegenEnqueuer extends EnqueuerImpl {
final String name;
final EnqueuerStrategy strategy;
- Set<ClassElement> _recentClasses = new Setlet<ClassElement>();
+ Set<ClassEntity> _recentClasses = new Setlet<ClassEntity>();
final CodegenWorldBuilderImpl _universe;
bool queueIsClosed = false;
@@ -47,9 +45,11 @@ class CodegenEnqueuer extends EnqueuerImpl {
WorldImpactVisitor _impactVisitor;
final Queue<WorkItem> _queue = new Queue<WorkItem>();
- final Map<Element, js.Expression> generatedCode = <Element, js.Expression>{};
- final Set<Element> newlyEnqueuedElements;
+ /// All declaration elements that have been processed by codegen.
+ final Set<Entity> _processedEntities = new Set<Entity>();
+
+ final Set<Entity> newlyEnqueuedElements;
final Set<DynamicUse> newlySeenSelectors;
@@ -84,6 +84,7 @@ class CodegenEnqueuer extends EnqueuerImpl {
assert(invariant(element, element.isDeclaration));
// Don't generate code for foreign elements.
if (_backend.isForeign(element)) return;
+ if (element.isAbstract) return;
// Codegen inlines field initializers. It only needs to generate
// code for checked setters.
@@ -94,7 +95,8 @@ class CodegenEnqueuer extends EnqueuerImpl {
}
}
- if (_options.hasIncrementalSupport && !isProcessed(element)) {
+ if (_options.hasIncrementalSupport &&
+ !_processedEntities.contains(element)) {
newlyEnqueuedElements.add(element);
}
@@ -106,7 +108,7 @@ class CodegenEnqueuer extends EnqueuerImpl {
applyImpact(_backend.registerUsedElement(element, forResolution: false));
}
- void applyImpact(WorldImpact worldImpact, {Element impactSource}) {
+ void applyImpact(WorldImpact worldImpact, {var impactSource}) {
Siggi Cherem (dart-lang) 2016/12/20 19:26:34 var => Entity?
Johnni Winther 2016/12/21 09:43:40 No. The plan it to allow for any key; elements, bu
if (worldImpact.isEmpty) return;
impactStrategy.visitImpact(
impactSource, worldImpact, _impactVisitor, impactUse);
@@ -128,8 +130,8 @@ class CodegenEnqueuer extends EnqueuerImpl {
return strategy.checkEnqueuerConsistency(this);
}
- void checkClass(ClassElement cls) {
- _universe.processClassMembers(cls, (MemberElement member, useSet) {
+ void checkClass(ClassEntity cls) {
+ _universe.processClassMembers(cls, (MemberEntity member, useSet) {
if (useSet.isNotEmpty) {
_backend.compiler.reporter.internalError(member,
'Unenqueued use of $member: ${useSet.iterable(MemberUse.values)}');
@@ -177,9 +179,6 @@ class CodegenEnqueuer extends EnqueuerImpl {
}
void processStaticUse(StaticUse staticUse) {
- Element element = staticUse.element;
- assert(invariant(element, element.isDeclaration,
- message: "Element ${element} is not the declaration."));
_universe.registerStaticUse(staticUse, _applyMemberUse);
switch (staticUse.kind) {
case StaticUseKind.CONSTRUCTOR_INVOKE:
@@ -241,10 +240,11 @@ class CodegenEnqueuer extends EnqueuerImpl {
while (_queue.isNotEmpty) {
// TODO(johnniwinther): Find an optimal process order.
WorkItem work = _queue.removeLast();
- if (!isProcessed(work.element)) {
+ if (!_processedEntities.contains(work.element)) {
strategy.processWorkItem(f, work);
// TODO(johnniwinther): Register the processed element here. This
// is currently a side-effect of calling `work.run`.
+ _processedEntities.add(work.element);
}
}
List recents = _recentClasses.toList(growable: false);
@@ -259,12 +259,12 @@ class CodegenEnqueuer extends EnqueuerImpl {
/// the [recentClasses] have been processed and may be cleared. If [false] is
/// returned, [_onQueueEmpty] will be called once the queue is empty again (or
/// still empty) and [recentClasses] will be a superset of the current value.
- bool _onQueueEmpty(Iterable<ClassElement> recentClasses) {
+ bool _onQueueEmpty(Iterable<ClassEntity> recentClasses) {
return _backend.onQueueEmpty(this, recentClasses);
}
void logSummary(log(message)) {
- log('Compiled ${generatedCode.length} methods.');
+ log('Compiled ${_processedEntities.length} methods.');
nativeEnqueuer.logSummary(log);
}
@@ -272,21 +272,13 @@ class CodegenEnqueuer extends EnqueuerImpl {
ImpactUseCase get impactUse => IMPACT_USE;
- bool isProcessed(Element member) =>
- member.isAbstract || generatedCode.containsKey(member);
-
- void forgetEntity(Element element, Compiler compiler) {
- _universe.forgetElement(element, compiler);
- generatedCode.remove(element);
- if (element is MemberElement) {
- for (Element closure in element.nestedClosures) {
- generatedCode.remove(closure);
- }
- }
+ void forgetEntity(Entity entity, Compiler compiler) {
+ _universe.forgetElement(entity, compiler);
+ _processedEntities.remove(entity);
}
@override
- Iterable<Entity> get processedEntities => generatedCode.keys;
+ Iterable<Entity> get processedEntities => _processedEntities;
@override
Iterable<ClassEntity> get processedClasses => _universe.processedClasses;
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | tests/compiler/dart2js/mirrors_used_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698