| Index: pkg/compiler/lib/src/js_model/locals.dart
|
| diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
|
| index 92686b37c328385ccf962feb44afae3bc5e5a345..306fd3dd9e9d25036ad2972a6a180a5db17e26a9 100644
|
| --- a/pkg/compiler/lib/src/js_model/locals.dart
|
| +++ b/pkg/compiler/lib/src/js_model/locals.dart
|
| @@ -6,7 +6,6 @@ library dart2js.js_model.locals;
|
|
|
| import 'package:kernel/ast.dart' as ir;
|
|
|
| -import 'closure.dart' show JClosureClass;
|
| import '../closure.dart';
|
| import '../common.dart';
|
| import '../elements/entities.dart';
|
| @@ -17,10 +16,20 @@ class GlobalLocalsMap {
|
| Map<MemberEntity, KernelToLocalsMap> _localsMaps =
|
| <MemberEntity, KernelToLocalsMap>{};
|
|
|
| + /// Returns the [KernelToLocalsMap] for [member].
|
| KernelToLocalsMap getLocalsMap(MemberEntity member) {
|
| return _localsMaps.putIfAbsent(
|
| member, () => new KernelToLocalsMapImpl(member));
|
| }
|
| +
|
| + /// Associates [localsMap] with [member].
|
| + ///
|
| + /// Use this for sharing maps between members that share IR nodes.
|
| + void setLocalsMap(MemberEntity member, KernelToLocalsMap localsMap) {
|
| + assert(!_localsMaps.containsKey(member),
|
| + "Locals map already created for $member.");
|
| + _localsMaps[member] = localsMap;
|
| + }
|
| }
|
|
|
| class KernelToLocalsMapImpl implements KernelToLocalsMap {
|
| @@ -126,15 +135,7 @@ class KernelToLocalsMapImpl implements KernelToLocalsMap {
|
| }
|
|
|
| @override
|
| - Local getLocalVariable(ir.VariableDeclaration node,
|
| - {bool isClosureCallMethod = false}) {
|
| - if (isClosureCallMethod && !_map.containsKey(node)) {
|
| - // Node might correspond to a free variable in the closure class.
|
| - assert(currentMember.enclosingClass is JClosureClass);
|
| - return (currentMember.enclosingClass as JClosureClass)
|
| - .localsMap
|
| - .getLocalVariable(node);
|
| - }
|
| + Local getLocalVariable(ir.VariableDeclaration node) {
|
| return _map.putIfAbsent(node, () {
|
| return new JLocal(
|
| node.name, currentMember, node.parent is ir.FunctionNode);
|
|
|