| Index: pkg/compiler/lib/src/enqueue.dart
|
| diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
|
| index 748a5e2e26c9ef9b3a8f9253cedc3cf34345f6de..c29912a3c3b02713883c71a3f2d81023fd9a939f 100644
|
| --- a/pkg/compiler/lib/src/enqueue.dart
|
| +++ b/pkg/compiler/lib/src/enqueue.dart
|
| @@ -131,7 +131,8 @@ class ResolutionEnqueuer extends Enqueuer {
|
| 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());
|
| + final ResolutionUniverseImpl _universe =
|
| + new ResolutionUniverseImpl(const TypeMaskStrategy());
|
|
|
| static final TRACE_MIRROR_ENQUEUING =
|
| const bool.fromEnvironment("TRACE_MIRROR_ENQUEUING");
|
| @@ -155,6 +156,8 @@ class ResolutionEnqueuer extends Enqueuer {
|
| // TODO(johnniwinther): Move this to [ResolutionEnqueuer].
|
| Resolution get resolution => compiler.resolution;
|
|
|
| + ResolutionUniverse get universe => _universe;
|
| +
|
| bool get queueIsEmpty => queue.isEmpty;
|
|
|
| QueueFilter get filter => compiler.enqueuerFilter;
|
| @@ -191,7 +194,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| 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
|
| @@ -228,12 +231,12 @@ class ResolutionEnqueuer extends Enqueuer {
|
| // classes, which may not be the case when a native class is subclassed.
|
| if (compiler.backend.isNative(cls)) {
|
| compiler.openWorld.registerUsedElement(member);
|
| - if (universe.hasInvokedGetter(member, compiler.openWorld) ||
|
| - universe.hasInvocation(member, compiler.openWorld)) {
|
| + if (_universe.hasInvokedGetter(member, compiler.openWorld) ||
|
| + _universe.hasInvocation(member, compiler.openWorld)) {
|
| addToWorkList(member);
|
| return;
|
| }
|
| - if (universe.hasInvokedSetter(member, compiler.openWorld)) {
|
| + if (_universe.hasInvokedSetter(member, compiler.openWorld)) {
|
| addToWorkList(member);
|
| return;
|
| }
|
| @@ -257,7 +260,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| }
|
| // If there is a property access with the same name as a method we
|
| // need to emit the method.
|
| - if (universe.hasInvokedGetter(function, compiler.openWorld)) {
|
| + if (_universe.hasInvokedGetter(function, compiler.openWorld)) {
|
| registerClosurizedMember(function);
|
| addToWorkList(function);
|
| return;
|
| @@ -267,27 +270,27 @@ class ResolutionEnqueuer extends Enqueuer {
|
| instanceFunctionsByName
|
| .putIfAbsent(memberName, () => new Set<Element>())
|
| .add(member);
|
| - if (universe.hasInvocation(function, compiler.openWorld)) {
|
| + if (_universe.hasInvocation(function, compiler.openWorld)) {
|
| addToWorkList(function);
|
| return;
|
| }
|
| } else if (member.isGetter) {
|
| FunctionElement getter = member;
|
| getter.computeType(resolution);
|
| - if (universe.hasInvokedGetter(getter, compiler.openWorld)) {
|
| + if (_universe.hasInvokedGetter(getter, compiler.openWorld)) {
|
| addToWorkList(getter);
|
| return;
|
| }
|
| // We don't know what selectors the returned closure accepts. If
|
| // the set contains any selector we have to assume that it matches.
|
| - if (universe.hasInvocation(getter, compiler.openWorld)) {
|
| + if (_universe.hasInvocation(getter, compiler.openWorld)) {
|
| addToWorkList(getter);
|
| return;
|
| }
|
| } else if (member.isSetter) {
|
| FunctionElement setter = member;
|
| setter.computeType(resolution);
|
| - if (universe.hasInvokedSetter(setter, compiler.openWorld)) {
|
| + if (_universe.hasInvokedSetter(setter, compiler.openWorld)) {
|
| addToWorkList(setter);
|
| return;
|
| }
|
| @@ -334,7 +337,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
|
|
| void registerDynamicUse(DynamicUse dynamicUse) {
|
| task.measure(() {
|
| - if (universe.registerDynamicUse(dynamicUse)) {
|
| + if (_universe.registerDynamicUse(dynamicUse)) {
|
| handleUnseenSelector(dynamicUse);
|
| }
|
| });
|
| @@ -570,7 +573,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| Element element = staticUse.element;
|
| assert(invariant(element, element.isDeclaration,
|
| message: "Element ${element} is not the declaration."));
|
| - universe.registerStaticUse(staticUse);
|
| + _universe.registerStaticUse(staticUse);
|
| compiler.backend.registerStaticUse(element, this);
|
| bool addElement = true;
|
| switch (staticUse.kind) {
|
| @@ -619,7 +622,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| }
|
|
|
| void _registerIsCheck(DartType type) {
|
| - type = universe.registerIsCheck(type, compiler);
|
| + type = _universe.registerIsCheck(type, compiler);
|
| // 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.
|
| @@ -629,7 +632,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| void registerCallMethodWithFreeTypeVariables(Element element) {
|
| compiler.backend.registerCallMethodWithFreeTypeVariables(
|
| element, this, compiler.globalDependencies);
|
| - universe.callMethodsWithFreeTypeVariables.add(element);
|
| + _universe.callMethodsWithFreeTypeVariables.add(element);
|
| }
|
|
|
| void registerClosurizedMember(TypedElement element) {
|
| @@ -637,9 +640,10 @@ class ResolutionEnqueuer extends Enqueuer {
|
| if (element.computeType(resolution).containsTypeVariables) {
|
| compiler.backend.registerClosureWithFreeTypeVariables(
|
| element, this, compiler.globalDependencies);
|
| + _universe.closuresWithFreeTypeVariables.add(element);
|
| }
|
| compiler.backend.registerBoundClosure(this);
|
| - universe.closurizedMembers.add(element);
|
| + _universe.closurizedMembers.add(element);
|
| }
|
|
|
| void forEach(void f(WorkItem work)) {
|
| @@ -809,7 +813,7 @@ class ResolutionEnqueuer extends Enqueuer {
|
| }
|
|
|
| void forgetElement(Element element) {
|
| - universe.forgetElement(element, compiler);
|
| + _universe.forgetElement(element, compiler);
|
| _processedClasses.remove(element);
|
| instanceMembersByName[element.name]?.remove(element);
|
| instanceFunctionsByName[element.name]?.remove(element);
|
|
|