| Index: pkg/compiler/lib/src/js_model/closure.dart
|
| diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
|
| index 06d8f2141aa62ad3a82d4fef59eec74e6dd611da..a0f2185e8f0c0a9dfce125ca322c85f85d5bbcc9 100644
|
| --- a/pkg/compiler/lib/src/js_model/closure.dart
|
| +++ b/pkg/compiler/lib/src/js_model/closure.dart
|
| @@ -36,14 +36,14 @@ class KernelClosureAnalysis {
|
| hasThisLocal: entity.isInstanceMember || entity.isConstructor);
|
| if (entity.isField) {
|
| if (node is ir.Field && node.initializer != null) {
|
| - translator.translateLazyInitializer(node);
|
| + node.accept(translator);
|
| } else {
|
| assert(entity.isInstanceMember);
|
| model.scopeInfo = new KernelScopeInfo(true);
|
| }
|
| } else {
|
| assert(node is ir.Procedure || node is ir.Constructor);
|
| - translator.translateConstructorOrProcedure(node);
|
| + node.accept(translator);
|
| }
|
| return model;
|
| }
|
| @@ -77,8 +77,8 @@ class KernelClosureConversionTask extends ClosureConversionTask<ir.Node> {
|
| <MemberEntity, ClosureRepresentationInfo>{};
|
|
|
| // The key is either a [ir.FunctionDeclaration] or [ir.FunctionExpression].
|
| - Map<ir.Node, ClosureRepresentationInfo> _localClosureRepresentationMap =
|
| - <ir.Node, ClosureRepresentationInfo>{};
|
| + Map<ir.TreeNode, ClosureRepresentationInfo> _localClosureRepresentationMap =
|
| + <ir.TreeNode, ClosureRepresentationInfo>{};
|
|
|
| KernelClosureConversionTask(Measurer measurer, this._elementMap,
|
| this._globalLocalsMap, this._closureModels)
|
| @@ -114,11 +114,19 @@ class KernelClosureConversionTask extends ClosureConversionTask<ir.Node> {
|
| }
|
| });
|
|
|
| - Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate =
|
| + Map<ir.TreeNode, KernelScopeInfo> closuresToGenerate =
|
| model.closuresToGenerate;
|
| - for (ir.FunctionNode node in closuresToGenerate.keys) {
|
| + for (ir.TreeNode node in closuresToGenerate.keys) {
|
| + ir.FunctionNode functionNode;
|
| + if (node is ir.FunctionDeclaration) {
|
| + functionNode = node.function;
|
| + } else if (node is ir.FunctionExpression) {
|
| + functionNode = node.function;
|
| + } else {
|
| + failedAt(member, "Unexpected closure node ${node}");
|
| + }
|
| KernelClosureClass closureClass = _produceSyntheticElements(
|
| - member, node, closuresToGenerate[node], closedWorldRefiner);
|
| + member, functionNode, closuresToGenerate[node], closedWorldRefiner);
|
| // Add also for the call method.
|
| _scopeMap[closureClass.callMethod] = closureClass;
|
| }
|
| @@ -205,6 +213,7 @@ class KernelClosureConversionTask extends ClosureConversionTask<ir.Node> {
|
|
|
| @override
|
| ClosureRepresentationInfo getClosureInfo(ir.Node node) {
|
| + assert(node is ir.FunctionExpression || node is ir.FunctionDeclaration);
|
| var closure = _localClosureRepresentationMap[node];
|
| assert(
|
| closure != null,
|
| @@ -586,6 +595,6 @@ class ScopeModel {
|
| <ir.Node, KernelCapturedScope>{};
|
|
|
| /// Collected [ScopeInfo] data for nodes.
|
| - Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate =
|
| - <ir.FunctionNode, KernelScopeInfo>{};
|
| + Map<ir.TreeNode, KernelScopeInfo> closuresToGenerate =
|
| + <ir.TreeNode, KernelScopeInfo>{};
|
| }
|
|
|