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

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

Issue 2320583002: Introduce OpenWorld. (Closed)
Patch Set: Updated cf. comments. Created 4 years, 3 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/use_unused_api.dart ('k') | tests/compiler/dart2js/class_set_test.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 b88ddb65c32215548c450beec378f9dcec91c5dc..976be1af27cfad76de27dd5f5c40a59d09686fe3 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -170,6 +170,17 @@ abstract class ClassWorld {
/// This method is only provided for testing. For queries on classes, use the
/// methods defined in [ClassWorld].
ClassHierarchyNode getClassHierarchyNode(ClassElement cls);
+
+ /// Returns [ClassSet] for [cls] used to model the extends and implements
+ /// relations of known classes.
+ ///
+ /// This method is only provided for testing. For queries on classes, use the
+ /// methods defined in [ClassWorld].
+ ClassSet getClassSet(ClassElement cls);
+
+ // TODO(johnniwinther): Find a better strategy for caching these.
+ @deprecated
+ List<Map<ClassElement, TypeMask>> get canonicalizedTypeMasks;
}
/// The [ClosedWorld] represents the information known about a program when
@@ -254,7 +265,23 @@ abstract class ClosedWorldRefiner {
void registerClosureClass(ClassElement cls);
}
-class World implements ClosedWorld, ClosedWorldRefiner {
+abstract class OpenWorld implements ClassWorld {
+ /// Called to add [cls] to the set of known classes.
+ ///
+ /// This ensures that class hierarchy queries can be performed on [cls] and
+ /// classes that extend or implement it.
+ void registerClass(ClassElement cls);
+
+ void registerUsedElement(Element element);
+ void registerTypedef(TypedefElement typedef);
+
+ ClosedWorld populate();
+
+ /// Returns an iterable over all mixin applications that mixin [cls].
+ Iterable<MixinApplicationElement> allMixinUsesOf(ClassElement cls);
+}
+
+class WorldImpl implements ClosedWorld, ClosedWorldRefiner, OpenWorld {
/// Cache of [FlatTypeMask]s grouped by the 8 possible values of the
/// `FlatTypeMask.flags` property.
List<Map<ClassElement, TypeMask>> canonicalizedTypeMasks =
@@ -618,7 +645,7 @@ class World implements ClosedWorld, ClosedWorldRefiner {
final Set<Element> functionsCalledInLoop = new Set<Element>();
final Map<Element, SideEffects> sideEffects = new Map<Element, SideEffects>();
- final Set<TypedefElement> allTypedefs = new Set<TypedefElement>();
+ final Set<TypedefElement> _allTypedefs = new Set<TypedefElement>();
final Map<ClassElement, Set<MixinApplicationElement>> _mixinUses =
new Map<ClassElement, Set<MixinApplicationElement>>();
@@ -656,7 +683,7 @@ class World implements ClosedWorld, ClosedWorldRefiner {
return _typesImplementedBySubclasses[cls.declaration];
}
- World(Compiler compiler)
+ WorldImpl(Compiler compiler)
: allFunctions = new FunctionSet(compiler),
this._compiler = compiler,
alreadyPopulated = compiler.cacheStrategy.newSet();
@@ -682,6 +709,12 @@ class World implements ClosedWorld, ClosedWorldRefiner {
}
}
+ void registerTypedef(TypedefElement typdef) {
+ _allTypedefs.add(typdef);
+ }
+
+ Iterable<TypedefElement> get allTypedefs => _allTypedefs;
+
/// Returns [ClassHierarchyNode] for [cls] used to model the class hierarchies
/// of known classes.
///
@@ -759,7 +792,7 @@ class World implements ClosedWorld, ClosedWorldRefiner {
}
}
- void populate() {
+ ClosedWorld populate() {
/// Updates the `isDirectlyInstantiated` and `isIndirectlyInstantiated`
/// properties of the [ClassHierarchyNode] for [cls].
@@ -794,6 +827,8 @@ class World implements ClosedWorld, ClosedWorldRefiner {
// they also need RTI, so that a constructor passes the type
// variables to the super constructor.
_compiler.resolverWorld.directlyInstantiatedClasses.forEach(addSubtypes);
+
+ return this;
}
@override
« no previous file with comments | « pkg/compiler/lib/src/use_unused_api.dart ('k') | tests/compiler/dart2js/class_set_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698