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

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

Issue 2488353004: Remove Compiler access from ResolutionEnqueuer (Closed)
Patch Set: Updated cf. comments. Created 4 years, 1 month 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/universe/world_builder.dart ('k') | pkg/dart2js_incremental/lib/caching_compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/world.dart
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 014b16e63ef01a9028f0c5e678f01ad2cbe088c8..dd786a425824575358f2f77a2d54908a567bcd94 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -4,10 +4,10 @@
library dart2js.world;
+import 'cache_strategy.dart';
import 'closure.dart' show SynthesizedCallMethodElementX;
import 'common/backend_api.dart' show BackendClasses;
import 'common.dart';
-import 'compiler.dart' show Compiler;
import 'core_types.dart' show CoreClasses;
import 'dart_types.dart';
import 'elements/elements.dart'
@@ -25,6 +25,7 @@ import 'universe/class_set.dart';
import 'universe/function_set.dart' show FunctionSet;
import 'universe/selector.dart' show Selector;
import 'universe/side_effects.dart' show SideEffects;
+import 'universe/world_builder.dart' show ResolutionWorldBuilder;
import 'util/enumset.dart';
import 'util/util.dart' show Link;
@@ -46,6 +47,8 @@ abstract class ClosedWorld implements World {
/// Access to core classes used in the Dart language.
CoreClasses get coreClasses;
+ CommonMasks get commonMasks;
+
/// Returns `true` if [cls] is either directly or indirectly instantiated.
bool isInstantiated(ClassElement cls);
@@ -334,7 +337,7 @@ abstract class OpenWorld implements World {
void registerUsedElement(Element element);
void registerTypedef(TypedefElement typedef);
- ClosedWorld closeWorld();
+ ClosedWorld closeWorld(DiagnosticReporter reporter);
/// Returns an iterable over all mixin applications that mixin [cls].
Iterable<MixinApplicationElement> allMixinUsesOf(ClassElement cls);
@@ -437,7 +440,7 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
/// Returns `true` if [cls] is implemented by an instantiated class.
bool isImplemented(ClassElement cls) {
assert(isClosed);
- return _compiler.resolverWorld.isImplemented(cls);
+ return resolverWorld.isImplemented(cls);
}
/// Returns an iterable over the directly instantiated classes that extend
@@ -836,11 +839,9 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
}
}
- final Compiler _compiler;
+ final JavaScriptBackend _backend;
BackendClasses get backendClasses => _backend.backendClasses;
- JavaScriptBackend get _backend => _compiler.backend;
- CommonMasks get commonMasks => _compiler.commonMasks;
- final FunctionSet allFunctions;
+ FunctionSet _allFunctions;
final Set<Element> functionsCalledInLoop = new Set<Element>();
final Map<Element, SideEffects> sideEffects = new Map<Element, SideEffects>();
@@ -871,20 +872,33 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
final Set<Element> alreadyPopulated;
+ CommonMasks _commonMasks;
+
+ final CoreClasses coreClasses;
+
+ final CacheStrategy cacheStrategy;
+
+ final ResolutionWorldBuilder resolverWorld;
+
bool get isClosed => _closed;
Set<ClassElement> typesImplementedBySubclassesOf(ClassElement cls) {
return _typesImplementedBySubclasses[cls.declaration];
}
- WorldImpl(Compiler compiler)
- : allFunctions = new FunctionSet(compiler),
- this._compiler = compiler,
- alreadyPopulated = compiler.cacheStrategy.newSet();
+ WorldImpl(this.resolverWorld, this._backend, this.coreClasses,
+ CacheStrategy cacheStrategy)
+ : this.cacheStrategy = cacheStrategy,
+ alreadyPopulated = cacheStrategy.newSet() {
+ _allFunctions = new FunctionSet(this);
+ }
- CoreClasses get coreClasses => _compiler.coreClasses;
+ FunctionSet get allFunctions => _allFunctions;
- DiagnosticReporter get reporter => _compiler.reporter;
+ CommonMasks get commonMasks {
+ assert(isClosed);
+ return _commonMasks;
+ }
/// Called to add [cls] to the set of known classes.
///
@@ -979,7 +993,7 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
void _updateClassHierarchyNodeForClass(ClassElement cls,
{bool directlyInstantiated: false, bool abstractlyInstantiated: false}) {
- ClassHierarchyNode node = getClassHierarchyNode(cls);
+ ClassHierarchyNode node = _ensureClassHierarchyNode(cls);
_updateSuperClassHierarchyNodeForClass(node);
if (directlyInstantiated) {
node.isDirectlyInstantiated = true;
@@ -989,13 +1003,12 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
}
}
- ClosedWorld closeWorld() {
+ ClosedWorld closeWorld(DiagnosticReporter reporter) {
/// Updates the `isDirectlyInstantiated` and `isIndirectlyInstantiated`
/// properties of the [ClassHierarchyNode] for [cls].
void addSubtypes(ClassElement cls, EnumSet<Instantiation> instantiations) {
- if (_compiler.options.hasIncrementalSupport &&
- !alreadyPopulated.add(cls)) {
+ if (cacheStrategy.hasIncrementalSupport && !alreadyPopulated.add(cls)) {
return;
}
assert(cls.isDeclaration);
@@ -1027,9 +1040,10 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
// classes: if the superclass of these classes require RTI, then
// they also need RTI, so that a constructor passes the type
// variables to the super constructor.
- _compiler.resolverWorld.forEachInstantiatedClass(addSubtypes);
+ resolverWorld.forEachInstantiatedClass(addSubtypes);
_closed = true;
+ _commonMasks = new CommonMasks(this);
return this;
}
@@ -1072,14 +1086,16 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
}
Element locateSingleElement(Selector selector, TypeMask mask) {
+ assert(isClosed);
mask ??= commonMasks.dynamicType;
- return mask.locateSingleElement(selector, _compiler);
+ return mask.locateSingleElement(selector, this);
}
TypeMask extendMaskIfReachesAll(Selector selector, TypeMask mask) {
+ assert(isClosed);
bool canReachAll = true;
if (mask != null) {
- canReachAll = _compiler.enabledInvokeOn &&
+ canReachAll = _backend.hasInvokeOnSupport &&
mask.needsNoSuchMethodHandling(selector, this);
}
return canReachAll ? commonMasks.dynamicType : mask;
@@ -1107,8 +1123,8 @@ class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
return true;
}
if (element.isInstanceMember) {
- return !_compiler.resolverWorld.hasInvokedSetter(element, this) &&
- !_compiler.resolverWorld.fieldSetters.contains(element);
+ return !resolverWorld.hasInvokedSetter(element, this) &&
+ !resolverWorld.fieldSetters.contains(element);
}
return false;
}
« no previous file with comments | « pkg/compiler/lib/src/universe/world_builder.dart ('k') | pkg/dart2js_incremental/lib/caching_compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698