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/js_backend/backend.dart

Issue 2549423002: Change Enqueuer to use Entity instead of Element. (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
Index: pkg/compiler/lib/src/js_backend/backend.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 811096b1c8c3555b1044be11b568b4606a5acd15..35d372084f7b92d99849bf52fc6bfbdb994f94ac 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -30,6 +30,7 @@ import '../dart_types.dart';
import '../deferred_load.dart' show DeferredLoadTask;
import '../dump_info.dart' show DumpInfoTask;
import '../elements/elements.dart';
+import '../elements/entities.dart';
import '../enqueue.dart'
show Enqueuer, ResolutionEnqueuer, TreeShakingEnqueuerStrategy;
import '../io/position_information.dart' show PositionSourceInformationStrategy;
@@ -522,6 +523,9 @@ class JavaScriptBackend extends Backend {
/// `true` if access to [BackendHelpers.invokeOnMethod] is supported.
bool hasInvokeOnSupport = false;
+ /// `true` if tear-offs are supported for incremental compilation.
+ bool hasIncrementalTearOffSupport = false;
+
/// List of constants from metadata. If metadata must be preserved,
/// these constants must be registered.
final List<Dependency> metadataConstants = <Dependency>[];
@@ -1338,6 +1342,7 @@ class JavaScriptBackend extends Backend {
}
onResolutionComplete() {
+ compiler.enqueuer.resolution.processedEntities.forEach(processAnnotations);
super.onResolutionComplete();
computeMembersNeededForReflection();
rti.computeClassesNeedingRti();
@@ -1805,7 +1810,7 @@ class JavaScriptBackend extends Backend {
return compiler.closedWorld.hasOnlySubclasses(classElement);
}
- WorldImpact registerStaticUse(Element element, {bool forResolution}) {
+ WorldImpact registerUsedElement(Element element, {bool forResolution}) {
WorldImpactBuilderImpl worldImpact = new WorldImpactBuilderImpl();
if (element == helpers.disableTreeShakingMarker) {
isTreeShakingDisabled = true;
@@ -1830,6 +1835,8 @@ class JavaScriptBackend extends Backend {
}
} else if (element == helpers.requiresPreambleMarker) {
requiresPreamble = true;
+ } else if (element == helpers.invokeOnMethod && forResolution) {
+ hasInvokeOnSupport = true;
}
customElementsAnalysis.registerStaticUse(element,
forResolution: forResolution);
@@ -2254,7 +2261,7 @@ class JavaScriptBackend extends Backend {
}
/// Called when [enqueuer] is empty, but before it is closed.
- bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassElement> recentClasses) {
+ bool onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {
// Add elements used synthetically, that is, through features rather than
// syntax, for instance custom elements.
//
@@ -2281,13 +2288,15 @@ class JavaScriptBackend extends Backend {
kernelTask.buildKernelIr();
}
- if (compiler.options.hasIncrementalSupport) {
+ if (compiler.options.hasIncrementalSupport &&
+ !hasIncrementalTearOffSupport) {
// Always enable tear-off closures during incremental compilation.
Element element = helpers.closureFromTearOff;
- if (element != null && !enqueuer.isProcessed(element)) {
+ if (element != null) {
enqueuer.applyImpact(
impactTransformer.createImpactFor(impacts.closureClass));
}
+ hasIncrementalTearOffSupport = true;
}
if (!enqueuer.isResolutionQueue && preMirrorsMethodCount == 0) {
@@ -2333,7 +2342,7 @@ class JavaScriptBackend extends Backend {
// TODO(johnniwinther): We should have access to all recently processed
// elements and process these instead.
- processMetadata(compiler.enqueuer.resolution.processedElements,
+ processMetadata(compiler.enqueuer.resolution.processedEntities,
registerMetadataConstant);
} else {
for (Dependency dependency in metadataConstants) {
@@ -2347,9 +2356,9 @@ class JavaScriptBackend extends Backend {
return true;
}
- /// Call [registerMetadataConstant] on all metadata from [elements].
- void processMetadata(Iterable<Element> elements,
- void onMetadata(MetadataAnnotation metadata)) {
+ /// Call [registerMetadataConstant] on all metadata from [entities].
+ void processMetadata(
+ Iterable<Entity> entities, void onMetadata(MetadataAnnotation metadata)) {
void processLibraryMetadata(LibraryElement library) {
if (_registeredMetadata.add(library)) {
library.metadata.forEach(onMetadata);
@@ -2377,7 +2386,7 @@ class JavaScriptBackend extends Backend {
}
}
- elements.forEach(processElementMetadata);
+ entities.forEach(processElementMetadata);
}
void onQueueClosed() {
@@ -2389,10 +2398,10 @@ class JavaScriptBackend extends Backend {
lookupMapAnalysis.onCodegenStart();
}
- @override
- void onElementResolved(Element element) {
+ /// Process backend specific annotations.
+ void processAnnotations(Element element) {
if (element.isMalformed) {
- // Elements that are marker as malformed during parsing or resolution
+ // Elements that are marked as malformed during parsing or resolution
// might be registered here. These should just be ignored.
return;
}
@@ -2466,18 +2475,8 @@ class JavaScriptBackend extends Backend {
reporter.internalError(element,
"@NoSideEffects() should always be combined with @NoInline.");
}
- if (element == helpers.invokeOnMethod) {
- hasInvokeOnSupport = true;
- }
}
-/*
- CodeBuffer codeOf(Element element) {
- return generatedCode.containsKey(element)
- ? jsAst.prettyPrint(generatedCode[element], compiler)
- : null;
- }
-*/
FunctionElement helperForBadMain() => helpers.badMain;
FunctionElement helperForMissingMain() => helpers.missingMain;
@@ -3178,7 +3177,7 @@ class JavaScriptImpactStrategy extends ImpactStrategy {
this.supportSerialization});
@override
- void visitImpact(Element element, WorldImpact impact,
+ void visitImpact(var impactSource, WorldImpact impact,
WorldImpactVisitor visitor, ImpactUseCase impactUse) {
// TODO(johnniwinther): Compute the application strategy once for each use.
if (impactUse == ResolutionEnqueuer.IMPACT_USE) {
@@ -3186,8 +3185,8 @@ class JavaScriptImpactStrategy extends ImpactStrategy {
impact.apply(visitor);
} else {
impact.apply(visitor);
- if (element != null) {
- resolution.uncacheWorldImpact(element);
+ if (impactSource is Element) {
+ resolution.uncacheWorldImpact(impactSource);
}
}
} else if (impactUse == DeferredLoadTask.IMPACT_USE) {
@@ -3195,7 +3194,7 @@ class JavaScriptImpactStrategy extends ImpactStrategy {
// Impacts are uncached globally in [onImpactUsed].
} else if (impactUse == DumpInfoTask.IMPACT_USE) {
impact.apply(visitor);
- dumpInfoTask.unregisterImpact(element);
+ dumpInfoTask.unregisterImpact(impactSource);
} else {
impact.apply(visitor);
}
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart ('k') | pkg/compiler/lib/src/js_backend/enqueuer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698