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

Side by Side Diff: pkg/compiler/lib/src/js_model/locals.dart

Issue 3000233002: Remove KernelToLocalsMap.getLocalFunction (Closed)
Patch Set: Created 3 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.js_model.locals; 5 library dart2js.js_model.locals;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import 'closure.dart' show JClosureClass; 9 import 'closure.dart' show JClosureClass;
10 import '../closure.dart'; 10 import '../closure.dart';
11 import '../common.dart'; 11 import '../common.dart';
12 import '../elements/entities.dart'; 12 import '../elements/entities.dart';
13 import '../elements/jumps.dart'; 13 import '../elements/jumps.dart';
14 import '../kernel/element_map.dart'; 14 import '../kernel/element_map.dart';
15 15
16 class GlobalLocalsMap { 16 class GlobalLocalsMap {
17 Map<MemberEntity, KernelToLocalsMap> _localsMaps = 17 Map<MemberEntity, KernelToLocalsMap> _localsMaps =
18 <MemberEntity, KernelToLocalsMap>{}; 18 <MemberEntity, KernelToLocalsMap>{};
19 19
20 KernelToLocalsMap getLocalsMap(MemberEntity member) { 20 KernelToLocalsMap getLocalsMap(MemberEntity member) {
21 return _localsMaps.putIfAbsent( 21 return _localsMaps.putIfAbsent(
22 member, () => new KernelToLocalsMapImpl(member)); 22 member, () => new KernelToLocalsMapImpl(member));
23 } 23 }
24 } 24 }
25 25
26 class KernelToLocalsMapImpl implements KernelToLocalsMap { 26 class KernelToLocalsMapImpl implements KernelToLocalsMap {
27 final List<MemberEntity> _members = <MemberEntity>[]; 27 final List<MemberEntity> _members = <MemberEntity>[];
28 Map<ir.TreeNode, JLocal> _map = <ir.TreeNode, JLocal>{}; 28 Map<ir.VariableDeclaration, JLocal> _map = <ir.VariableDeclaration, JLocal>{};
29 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap; 29 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap;
30 Set<ir.BreakStatement> _breaksAsContinue; 30 Set<ir.BreakStatement> _breaksAsContinue;
31 31
32 MemberEntity get currentMember => _members.last; 32 MemberEntity get currentMember => _members.last;
33 33
34 // TODO(johnniwinther): Compute this eagerly from the root of the member. 34 // TODO(johnniwinther): Compute this eagerly from the root of the member.
35 void _ensureJumpMap(ir.TreeNode node) { 35 void _ensureJumpMap(ir.TreeNode node) {
36 if (_jumpTargetMap == null) { 36 if (_jumpTargetMap == null) {
37 JumpVisitor visitor = new JumpVisitor(currentMember); 37 JumpVisitor visitor = new JumpVisitor(currentMember);
38 38
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 .localsMap 135 .localsMap
136 .getLocalVariable(node); 136 .getLocalVariable(node);
137 } 137 }
138 return _map.putIfAbsent(node, () { 138 return _map.putIfAbsent(node, () {
139 return new JLocal( 139 return new JLocal(
140 node.name, currentMember, node.parent is ir.FunctionNode); 140 node.name, currentMember, node.parent is ir.FunctionNode);
141 }); 141 });
142 } 142 }
143 143
144 @override 144 @override
145 // TODO(johnniwinther): Split this out into two methods -- one for
146 // FunctionDeclaration and one for FunctionExpression, since basically the
147 // whole thing is different depending on the node type. The reason it's not
148 // done yet is the version of this function that it's overriding has a little
149 // bit of commonality.
150 Local getLocalFunction(ir.TreeNode node) {
151 assert(node is ir.FunctionDeclaration || node is ir.FunctionExpression,
152 failedAt(currentMember, 'Invalid local function node: $node'));
153 var lookupName = node;
154 if (node is ir.FunctionDeclaration) lookupName = node.variable;
155 return _map.putIfAbsent(lookupName, () {
156 String name;
157 if (node is ir.FunctionDeclaration) {
158 name = node.variable.name;
159 } else if (node is ir.FunctionExpression) {
160 name = '';
161 }
162 return new JLocal(name, currentMember);
163 });
164 }
165
166 @override
167 CapturedLoopScope getCapturedLoopScope( 145 CapturedLoopScope getCapturedLoopScope(
168 ClosureDataLookup closureLookup, ir.TreeNode node) { 146 ClosureDataLookup closureLookup, ir.TreeNode node) {
169 return closureLookup.getCapturedLoopScope(node); 147 return closureLookup.getCapturedLoopScope(node);
170 } 148 }
171 149
172 @override 150 @override
173 ClosureRepresentationInfo getClosureRepresentationInfo( 151 ClosureRepresentationInfo getClosureRepresentationInfo(
174 ClosureDataLookup closureLookup, ir.TreeNode node) { 152 ClosureDataLookup closureLookup, ir.TreeNode node) {
175 return closureLookup.getClosureInfo(node); 153 return closureLookup.getClosureInfo(node);
176 } 154 }
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 sb.write(memberContext.enclosingClass.name); 342 sb.write(memberContext.enclosingClass.name);
365 sb.write('.'); 343 sb.write('.');
366 } 344 }
367 sb.write(memberContext.name); 345 sb.write(memberContext.name);
368 sb.write('#'); 346 sb.write('#');
369 sb.write(name); 347 sb.write(name);
370 sb.write(')'); 348 sb.write(')');
371 return sb.toString(); 349 return sb.toString();
372 } 350 }
373 } 351 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/closure.dart ('k') | pkg/compiler/lib/src/kernel/element_map.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698