| Index: pkg/compiler/lib/src/closure.dart
|
| diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
|
| index 2c08ec980970b103195ec79d20323b75016d900d..2d3c15edfc7673d2376532b60ccfd03e08733929 100644
|
| --- a/pkg/compiler/lib/src/closure.dart
|
| +++ b/pkg/compiler/lib/src/closure.dart
|
| @@ -20,6 +20,7 @@ import 'resolution/tree_elements.dart' show TreeElements;
|
| import 'tokens/token.dart' show Token;
|
| import 'tree/tree.dart';
|
| import 'util/util.dart';
|
| +import 'world.dart' show ClosedWorldRefiner;
|
|
|
| class ClosureTask extends CompilerTask {
|
| Map<Element, ClosureClassMap> _closureMappingCache =
|
| @@ -49,7 +50,7 @@ class ClosureTask extends CompilerTask {
|
| }
|
|
|
| /// Create [ClosureClassMap]s for all live members.
|
| - void createClosureClasses() {
|
| + void createClosureClasses(ClosedWorldRefiner closedWorldRefiner) {
|
| compiler.enqueuer.resolution.processedEntities
|
| .forEach((AstElement element) {
|
| // TODO(johnniwinther): Typedefs should never be in processedElements.
|
| @@ -62,11 +63,12 @@ class ClosureTask extends CompilerTask {
|
| // Skip top-level/static fields without an initializer.
|
| return;
|
| }
|
| - computeClosureToClassMapping(resolvedAst);
|
| + computeClosureToClassMapping(resolvedAst, closedWorldRefiner);
|
| });
|
| }
|
|
|
| - ClosureClassMap computeClosureToClassMapping(ResolvedAst resolvedAst) {
|
| + ClosureClassMap computeClosureToClassMapping(
|
| + ResolvedAst resolvedAst, ClosedWorldRefiner closedWorldRefiner) {
|
| return measure(() {
|
| Element element = resolvedAst.element;
|
| ClosureClassMap cached = _closureMappingCache[element];
|
| @@ -79,8 +81,8 @@ class ClosureTask extends CompilerTask {
|
| Node node = resolvedAst.node;
|
| TreeElements elements = resolvedAst.elements;
|
|
|
| - ClosureTranslator translator =
|
| - new ClosureTranslator(compiler, elements, _closureMappingCache);
|
| + ClosureTranslator translator = new ClosureTranslator(
|
| + compiler, closedWorldRefiner, elements, _closureMappingCache);
|
|
|
| // The translator will store the computed closure-mappings inside the
|
| // cache. One for given node and one for each nested closure.
|
| @@ -545,6 +547,7 @@ class ClosureClassMap {
|
|
|
| class ClosureTranslator extends Visitor {
|
| final Compiler compiler;
|
| + final ClosedWorldRefiner closedWorldRefiner;
|
| final TreeElements elements;
|
| int closureFieldCounter = 0;
|
| int boxedFieldCounter = 0;
|
| @@ -576,7 +579,8 @@ class ClosureTranslator extends Visitor {
|
|
|
| bool insideClosure = false;
|
|
|
| - ClosureTranslator(this.compiler, this.elements, this.closureMappingCache);
|
| + ClosureTranslator(this.compiler, this.closedWorldRefiner, this.elements,
|
| + this.closureMappingCache);
|
|
|
| DiagnosticReporter get reporter => compiler.reporter;
|
|
|
| @@ -1070,7 +1074,7 @@ class ClosureTranslator extends Visitor {
|
| ClosureClassElement globalizedElement =
|
| new ClosureClassElement(node, closureName, compiler, element);
|
| // Extend [globalizedElement] as an instantiated class in the closed world.
|
| - compiler.inferenceWorld.registerClosureClass(globalizedElement);
|
| + closedWorldRefiner.registerClosureClass(globalizedElement);
|
| FunctionElement callElement = new SynthesizedCallMethodElementX(
|
| Identifiers.call, element, globalizedElement, node, elements);
|
| backend.maybeMarkClosureAsNeededForReflection(
|
|
|