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

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

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « pkg/compiler/lib/src/elements/visitor.dart ('k') | pkg/compiler/lib/src/hash/sha1.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 38c02bf9d235533193f90615711ffc7ad57cc5fd..ff3c21c35f92ca5b897bb6600fbe7542832af69a 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -4,66 +4,44 @@
library dart2js.enqueue;
-import 'dart:collection' show
- Queue;
+import 'dart:collection' show Queue;
import 'common.dart';
-import 'common/names.dart' show
- Identifiers;
-import 'common/resolution.dart' show
- Resolution;
-import 'common/work.dart' show
- ItemCompilationContext,
- WorkItem;
-import 'common/tasks.dart' show
- CompilerTask,
- DeferredAction,
- DeferredTask;
-import 'common/codegen.dart' show
- CodegenWorkItem;
-import 'common/resolution.dart' show
- ResolutionWorkItem;
-import 'compiler.dart' show
- Compiler;
-import 'dart_types.dart' show
- DartType,
- InterfaceType;
-import 'elements/elements.dart' show
- AnalyzableElement,
- AstElement,
- ClassElement,
- ConstructorElement,
- Element,
- Elements,
- FunctionElement,
- LibraryElement,
- LocalFunctionElement,
- Member,
- MemberElement,
- MethodElement,
- Name,
- TypedElement,
- TypedefElement;
+import 'common/names.dart' show Identifiers;
+import 'common/resolution.dart' show Resolution;
+import 'common/work.dart' show ItemCompilationContext, WorkItem;
+import 'common/tasks.dart' show CompilerTask, DeferredAction, DeferredTask;
+import 'common/codegen.dart' show CodegenWorkItem;
+import 'common/resolution.dart' show ResolutionWorkItem;
+import 'compiler.dart' show Compiler;
+import 'dart_types.dart' show DartType, InterfaceType;
+import 'elements/elements.dart'
+ show
+ AnalyzableElement,
+ AstElement,
+ ClassElement,
+ ConstructorElement,
+ Element,
+ Elements,
+ FunctionElement,
+ LibraryElement,
+ LocalFunctionElement,
+ Member,
+ MemberElement,
+ MethodElement,
+ Name,
+ TypedElement,
+ TypedefElement;
import 'js/js.dart' as js;
import 'native/native.dart' as native;
-import 'types/types.dart' show
- TypeMaskStrategy;
-import 'universe/selector.dart' show
- Selector;
+import 'types/types.dart' show TypeMaskStrategy;
+import 'universe/selector.dart' show Selector;
import 'universe/universe.dart';
-import 'universe/use.dart' show
- DynamicUse,
- StaticUse,
- StaticUseKind,
- TypeUse,
- TypeUseKind;
-import 'universe/world_impact.dart' show
- ImpactUseCase,
- WorldImpact,
- WorldImpactVisitor;
-import 'util/util.dart' show
- Link,
- Setlet;
+import 'universe/use.dart'
+ show DynamicUse, StaticUse, StaticUseKind, TypeUse, TypeUseKind;
+import 'universe/world_impact.dart'
+ show ImpactUseCase, WorldImpact, WorldImpactVisitor;
+import 'util/util.dart' show Link, Setlet;
typedef ItemCompilationContext ItemCompilationContextCreator();
@@ -74,14 +52,17 @@ class EnqueueTask extends CompilerTask {
String get name => 'Enqueue';
EnqueueTask(Compiler compiler)
- : resolution = new ResolutionEnqueuer(
- compiler, compiler.backend.createItemCompilationContext,
- compiler.options.analyzeOnly && compiler.options.analyzeMain
- ? const EnqueuerStrategy() : const TreeShakingEnqueuerStrategy()),
- codegen = new CodegenEnqueuer(
- compiler, compiler.backend.createItemCompilationContext,
- const TreeShakingEnqueuerStrategy()),
- super(compiler) {
+ : resolution = new ResolutionEnqueuer(
+ compiler,
+ compiler.backend.createItemCompilationContext,
+ compiler.options.analyzeOnly && compiler.options.analyzeMain
+ ? const EnqueuerStrategy()
+ : const TreeShakingEnqueuerStrategy()),
+ codegen = new CodegenEnqueuer(
+ compiler,
+ compiler.backend.createItemCompilationContext,
+ const TreeShakingEnqueuerStrategy()),
+ super(compiler) {
codegen.task = this;
resolution.task = this;
@@ -101,10 +82,10 @@ abstract class Enqueuer {
final Compiler compiler; // TODO(ahe): Remove this dependency.
final EnqueuerStrategy strategy;
final ItemCompilationContextCreator itemCompilationContextCreator;
- final Map<String, Set<Element>> instanceMembersByName
- = new Map<String, Set<Element>>();
- final Map<String, Set<Element>> instanceFunctionsByName
- = new Map<String, Set<Element>>();
+ final Map<String, Set<Element>> instanceMembersByName =
+ new Map<String, Set<Element>>();
+ final Map<String, Set<Element>> instanceFunctionsByName =
+ new Map<String, Set<Element>>();
final Set<ClassElement> _processedClasses = new Set<ClassElement>();
Set<ClassElement> recentClasses = new Setlet<ClassElement>();
final Universe universe = new Universe(const TypeMaskStrategy());
@@ -114,17 +95,15 @@ abstract class Enqueuer {
bool queueIsClosed = false;
EnqueueTask task;
- native.NativeEnqueuer nativeEnqueuer; // Set by EnqueueTask
+ native.NativeEnqueuer nativeEnqueuer; // Set by EnqueueTask
bool hasEnqueuedReflectiveElements = false;
bool hasEnqueuedReflectiveStaticFields = false;
WorldImpactVisitor impactVisitor;
- Enqueuer(this.name,
- this.compiler,
- this.itemCompilationContextCreator,
- this.strategy) {
+ Enqueuer(this.name, this.compiler, this.itemCompilationContextCreator,
+ this.strategy) {
impactVisitor = new _EnqueuerImpactVisitor(this);
}
@@ -160,8 +139,8 @@ abstract class Enqueuer {
if (internalAddToWorkList(element) && compiler.options.dumpInfo) {
// TODO(sigmund): add other missing dependencies (internals, selectors
// enqueued after allocations), also enable only for the codegen enqueuer.
- compiler.dumpInfoTask.registerDependency(
- compiler.currentElement, element);
+ compiler.dumpInfoTask
+ .registerDependency(compiler.currentElement, element);
}
}
@@ -174,23 +153,20 @@ abstract class Enqueuer {
/// Apply the [worldImpact] of processing [element] to this enqueuer.
void applyImpact(Element element, WorldImpact worldImpact) {
- compiler.impactStrategy.visitImpact(
- element, worldImpact, impactVisitor, impactUse);
+ compiler.impactStrategy
+ .visitImpact(element, worldImpact, impactVisitor, impactUse);
}
- void registerInstantiatedType(InterfaceType type,
- {bool mirrorUsage: false}) {
+ void registerInstantiatedType(InterfaceType type, {bool mirrorUsage: false}) {
task.measure(() {
ClassElement cls = type.element;
cls.ensureResolved(resolution);
bool isNative = compiler.backend.isNative(cls);
- universe.registerTypeInstantiation(
- type,
+ universe.registerTypeInstantiation(type,
isNative: isNative,
- byMirrors: mirrorUsage,
- onImplemented: (ClassElement cls) {
- compiler.backend.registerImplementedClass(
- cls, this, compiler.globalDependencies);
+ byMirrors: mirrorUsage, onImplemented: (ClassElement cls) {
+ compiler.backend
+ .registerImplementedClass(cls, this, compiler.globalDependencies);
});
// TODO(johnniwinther): Share this reasoning with [Universe].
if (!cls.isAbstract || isNative || mirrorUsage) {
@@ -260,8 +236,7 @@ abstract class Enqueuer {
if (function.name == Identifiers.noSuchMethod_) {
registerNoSuchMethod(function);
}
- if (function.name == Identifiers.call &&
- !cls.typeVariables.isEmpty) {
+ if (function.name == Identifiers.call && !cls.typeVariables.isEmpty) {
registerCallMethodWithFreeTypeVariables(function);
}
// If there is a property access with the same name as a method we
@@ -273,7 +248,8 @@ abstract class Enqueuer {
}
// Store the member in [instanceFunctionsByName] to catch
// getters on the function.
- instanceFunctionsByName.putIfAbsent(memberName, () => new Set<Element>())
+ instanceFunctionsByName
+ .putIfAbsent(memberName, () => new Set<Element>())
.add(member);
if (universe.hasInvocation(function, compiler.world)) {
addToWorkList(function);
@@ -303,7 +279,8 @@ abstract class Enqueuer {
// The element is not yet used. Add it to the list of instance
// members to still be processed.
- instanceMembersByName.putIfAbsent(memberName, () => new Set<Element>())
+ instanceMembersByName
+ .putIfAbsent(memberName, () => new Set<Element>())
.add(member);
}
@@ -368,7 +345,7 @@ abstract class Enqueuer {
* The actual implementation depends on the current compiler phase.
*/
bool shouldIncludeElementDueToMirrors(Element element,
- {bool includedEnclosing});
+ {bool includedEnclosing});
void logEnqueueReflectiveAction(action, [msg = ""]) {
if (TRACE_MIRROR_ENQUEUING) {
@@ -380,16 +357,14 @@ abstract class Enqueuer {
///
/// [enclosingWasIncluded] provides a hint whether the enclosing element was
/// needed for reflection.
- void enqueueReflectiveConstructor(ConstructorElement ctor,
- bool enclosingWasIncluded) {
+ void enqueueReflectiveConstructor(
+ ConstructorElement ctor, bool enclosingWasIncluded) {
if (shouldIncludeElementDueToMirrors(ctor,
includedEnclosing: enclosingWasIncluded)) {
logEnqueueReflectiveAction(ctor);
ClassElement cls = ctor.declaration.enclosingClass;
compiler.backend.registerInstantiatedType(
- cls.rawType,
- this,
- compiler.mirrorDependencies,
+ cls.rawType, this, compiler.mirrorDependencies,
mirrorUsage: true);
registerStaticUse(new StaticUse.foreignUse(ctor.declaration));
}
@@ -401,7 +376,7 @@ abstract class Enqueuer {
/// needed for reflection.
void enqueueReflectiveMember(Element element, bool enclosingWasIncluded) {
if (shouldIncludeElementDueToMirrors(element,
- includedEnclosing: enclosingWasIncluded)) {
+ includedEnclosing: enclosingWasIncluded)) {
logEnqueueReflectiveAction(element);
if (element.isTypedef) {
TypedefElement typedef = element;
@@ -413,13 +388,14 @@ abstract class Enqueuer {
// We need to enqueue all members matching this one in subclasses, as
// well.
// TODO(herhut): Use TypedSelector.subtype for enqueueing
- DynamicUse dynamicUse = new DynamicUse(
- new Selector.fromElement(element), null);
+ DynamicUse dynamicUse =
+ new DynamicUse(new Selector.fromElement(element), null);
registerDynamicUse(dynamicUse);
if (element.isField) {
DynamicUse dynamicUse = new DynamicUse(
- new Selector.setter(new Name(
- element.name, element.library, isSetter: true)), null);
+ new Selector.setter(
+ new Name(element.name, element.library, isSetter: true)),
+ null);
registerDynamicUse(dynamicUse);
}
}
@@ -431,8 +407,7 @@ abstract class Enqueuer {
/// [enclosingWasIncluded] provides a hint whether the enclosing element was
/// needed for reflection.
void enqueueReflectiveElementsInClass(ClassElement cls,
- Iterable<ClassElement> recents,
- bool enclosingWasIncluded) {
+ Iterable<ClassElement> recents, bool enclosingWasIncluded) {
if (cls.library.isInternalLibrary || cls.isInjected) return;
bool includeClass = shouldIncludeElementDueToMirrors(cls,
includedEnclosing: enclosingWasIncluded);
@@ -441,9 +416,7 @@ abstract class Enqueuer {
ClassElement decl = cls.declaration;
decl.ensureResolved(resolution);
compiler.backend.registerInstantiatedType(
- decl.rawType,
- this,
- compiler.mirrorDependencies,
+ decl.rawType, this, compiler.mirrorDependencies,
mirrorUsage: true);
}
// If the class is never instantiated, we know nothing of it can possibly
@@ -475,9 +448,7 @@ abstract class Enqueuer {
logEnqueueReflectiveAction(cls);
cls.ensureResolved(resolution);
compiler.backend.registerInstantiatedType(
- cls.rawType,
- this,
- compiler.mirrorDependencies,
+ cls.rawType, this, compiler.mirrorDependencies,
mirrorUsage: true);
}
}
@@ -485,10 +456,10 @@ abstract class Enqueuer {
/// Enqeue all local members of the library [lib] if they are required for
/// reflection.
- void enqueueReflectiveElementsInLibrary(LibraryElement lib,
- Iterable<ClassElement> recents) {
- bool includeLibrary = shouldIncludeElementDueToMirrors(lib,
- includedEnclosing: false);
+ void enqueueReflectiveElementsInLibrary(
+ LibraryElement lib, Iterable<ClassElement> recents) {
+ bool includeLibrary =
+ shouldIncludeElementDueToMirrors(lib, includedEnclosing: false);
lib.forEachLocalMember((Element member) {
if (member.isClass) {
enqueueReflectiveElementsInClass(member, recents, includeLibrary);
@@ -522,7 +493,9 @@ abstract class Enqueuer {
// Keep looking at new classes until fixpoint is reached.
logEnqueueReflectiveAction("!START enqueueRecents");
recents.forEach((ClassElement cls) {
- enqueueReflectiveElementsInClass(cls, recents,
+ enqueueReflectiveElementsInClass(
+ cls,
+ recents,
shouldIncludeElementDueToMirrors(cls.library,
includedEnclosing: false));
});
@@ -541,9 +514,7 @@ abstract class Enqueuer {
}
void processSet(
- Map<String, Set<Element>> map,
- String memberName,
- bool f(Element e)) {
+ Map<String, Set<Element>> map, String memberName, bool f(Element e)) {
Set<Element> members = map[memberName];
if (members == null) return;
// [f] might add elements to [: map[memberName] :] during the loop below
@@ -577,7 +548,8 @@ abstract class Enqueuer {
if (member.isFunction && selector.isGetter) {
registerClosurizedMember(member);
}
- if (member.isField && compiler.backend.isNative(member.enclosingClass)) {
+ if (member.isField &&
+ compiler.backend.isNative(member.enclosingClass)) {
if (selector.isGetter || selector.isCall) {
nativeEnqueuer.registerFieldLoad(member);
// We have to also handle storing to the field because we only get
@@ -677,8 +649,7 @@ abstract class Enqueuer {
// Even in checked mode, type annotations for return type and argument
// types do not imply type checks, so there should never be a check
// against the type variable of a typedef.
- assert(!type.isTypeVariable ||
- !type.element.enclosingElement.isTypedef);
+ assert(!type.isTypeVariable || !type.element.enclosingElement.isTypedef);
}
void registerCallMethodWithFreeTypeVariables(Element element) {
@@ -748,17 +719,17 @@ class ResolutionEnqueuer extends Enqueuer {
*/
final Queue<DeferredTask> deferredTaskQueue;
- static const ImpactUseCase IMPACT_USE = const ImpactUseCase('ResolutionEnqueuer');
+ static const ImpactUseCase IMPACT_USE =
+ const ImpactUseCase('ResolutionEnqueuer');
ImpactUseCase get impactUse => IMPACT_USE;
- ResolutionEnqueuer(Compiler compiler,
- ItemCompilationContext itemCompilationContextCreator(),
- EnqueuerStrategy strategy)
- : super('resolution enqueuer',
- compiler,
- itemCompilationContextCreator,
- strategy),
+ ResolutionEnqueuer(
+ Compiler compiler,
+ ItemCompilationContext itemCompilationContextCreator(),
+ EnqueuerStrategy strategy)
+ : super('resolution enqueuer', compiler, itemCompilationContextCreator,
+ strategy),
processedElements = new Set<AstElement>(),
queue = new Queue<ResolutionWorkItem>(),
deferredTaskQueue = new Queue<DeferredTask>();
@@ -786,8 +757,9 @@ class ResolutionEnqueuer extends Enqueuer {
* yet.
*/
bool shouldIncludeElementDueToMirrors(Element element,
- {bool includedEnclosing}) {
- return includedEnclosing || compiler.backend.requiredByMirrorSystem(element);
+ {bool includedEnclosing}) {
+ return includedEnclosing ||
+ compiler.backend.requiredByMirrorSystem(element);
}
bool internalAddToWorkList(Element element) {
@@ -797,22 +769,21 @@ class ResolutionEnqueuer extends Enqueuer {
message: 'Element $element is not analyzable.'));
if (hasBeenProcessed(element)) return false;
if (queueIsClosed) {
- throw new SpannableAssertionFailure(element,
- "Resolution work list is closed. Trying to add $element.");
+ throw new SpannableAssertionFailure(
+ element, "Resolution work list is closed. Trying to add $element.");
}
compiler.world.registerUsedElement(element);
- ResolutionWorkItem workItem = compiler.resolution.createWorkItem(
- element, itemCompilationContextCreator());
+ ResolutionWorkItem workItem = compiler.resolution
+ .createWorkItem(element, itemCompilationContextCreator());
queue.add(workItem);
// Enable isolate support if we start using something from the isolate
// library, or timers for the async library. We exclude constant fields,
// which are ending here because their initializing expression is compiled.
LibraryElement library = element.library;
- if (!compiler.hasIsolateSupport &&
- (!element.isField || !element.isConst)) {
+ if (!compiler.hasIsolateSupport && (!element.isField || !element.isConst)) {
String uri = library.canonicalUri.toString();
if (uri == 'dart:isolate') {
enableIsolateSupport();
@@ -861,7 +832,8 @@ class ResolutionEnqueuer extends Enqueuer {
*/
void addDeferredAction(Element element, DeferredAction action) {
if (queueIsClosed) {
- throw new SpannableAssertionFailure(element,
+ throw new SpannableAssertionFailure(
+ element,
"Resolution work list is closed. "
"Trying to add deferred action for $element");
}
@@ -901,18 +873,20 @@ class CodegenEnqueuer extends Enqueuer {
bool enabledNoSuchMethod = false;
- static const ImpactUseCase IMPACT_USE = const ImpactUseCase('CodegenEnqueuer');
+ static const ImpactUseCase IMPACT_USE =
+ const ImpactUseCase('CodegenEnqueuer');
ImpactUseCase get impactUse => IMPACT_USE;
- CodegenEnqueuer(Compiler compiler,
- ItemCompilationContext itemCompilationContextCreator(),
- EnqueuerStrategy strategy)
+ CodegenEnqueuer(
+ Compiler compiler,
+ ItemCompilationContext itemCompilationContextCreator(),
+ EnqueuerStrategy strategy)
: queue = new Queue<CodegenWorkItem>(),
newlyEnqueuedElements = compiler.cacheStrategy.newSet(),
newlySeenSelectors = compiler.cacheStrategy.newSet(),
super('codegen enqueuer', compiler, itemCompilationContextCreator,
- strategy);
+ strategy);
bool isProcessed(Element member) =>
member.isAbstract || generatedCode.containsKey(member);
@@ -925,7 +899,7 @@ class CodegenEnqueuer extends Enqueuer {
* subtyping constraints into account.
*/
bool shouldIncludeElementDueToMirrors(Element element,
- {bool includedEnclosing}) {
+ {bool includedEnclosing}) {
return compiler.backend.isAccessibleByReflection(element);
}
@@ -936,8 +910,8 @@ class CodegenEnqueuer extends Enqueuer {
// Codegen inlines field initializers. It only needs to generate
// code for checked setters.
if (element.isField && element.isInstanceMember) {
- if (!compiler.options.enableTypeAssertions
- || element.enclosingElement.isClosure) {
+ if (!compiler.options.enableTypeAssertions ||
+ element.enclosingElement.isClosure) {
return false;
}
}
@@ -947,11 +921,11 @@ class CodegenEnqueuer extends Enqueuer {
}
if (queueIsClosed) {
- throw new SpannableAssertionFailure(element,
- "Codegen work list is closed. Trying to add $element");
+ throw new SpannableAssertionFailure(
+ element, "Codegen work list is closed. Trying to add $element");
}
- CodegenWorkItem workItem = new CodegenWorkItem(
- compiler, element, itemCompilationContextCreator());
+ CodegenWorkItem workItem =
+ new CodegenWorkItem(compiler, element, itemCompilationContextCreator());
queue.add(workItem);
return true;
}
@@ -992,11 +966,11 @@ class QueueFilter {
bool checkNoEnqueuedInvokedInstanceMethods(Enqueuer enqueuer) {
enqueuer.task.measure(() {
// Run through the classes and see if we need to compile methods.
- for (ClassElement classElement in
- enqueuer.universe.directlyInstantiatedClasses) {
+ for (ClassElement classElement
+ in enqueuer.universe.directlyInstantiatedClasses) {
for (ClassElement currentClass = classElement;
- currentClass != null;
- currentClass = currentClass.superclass) {
+ currentClass != null;
+ currentClass = currentClass.superclass) {
enqueuer.processInstantiatedClassMembers(currentClass);
}
}
« no previous file with comments | « pkg/compiler/lib/src/elements/visitor.dart ('k') | pkg/compiler/lib/src/hash/sha1.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698