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

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

Issue 2981423003: Move .getLocalFunction from KernelToElementMap to KernelToLocalsMap (Closed)
Patch Set: Updated cf. comments 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'; 9 import '../closure.dart';
10 import '../common.dart'; 10 import '../common.dart';
11 import '../elements/entities.dart'; 11 import '../elements/entities.dart';
12 import '../elements/jumps.dart'; 12 import '../elements/jumps.dart';
13 import '../kernel/element_map.dart'; 13 import '../kernel/element_map.dart';
14 14
15 class GlobalLocalsMap { 15 class GlobalLocalsMap {
16 Map<MemberEntity, KernelToLocalsMap> _localsMaps = 16 Map<MemberEntity, KernelToLocalsMap> _localsMaps =
17 <MemberEntity, KernelToLocalsMap>{}; 17 <MemberEntity, KernelToLocalsMap>{};
18 18
19 KernelToLocalsMap getLocalsMap(MemberEntity member) { 19 KernelToLocalsMap getLocalsMap(MemberEntity member) {
20 return _localsMaps.putIfAbsent( 20 return _localsMaps.putIfAbsent(
21 member, () => new KernelToLocalsMapImpl(member)); 21 member, () => new KernelToLocalsMapImpl(member));
22 } 22 }
23 } 23 }
24 24
25 class KernelToLocalsMapImpl implements KernelToLocalsMap { 25 class KernelToLocalsMapImpl implements KernelToLocalsMap {
26 final List<MemberEntity> _members = <MemberEntity>[]; 26 final List<MemberEntity> _members = <MemberEntity>[];
27 Map<ir.VariableDeclaration, JLocal> _map = <ir.VariableDeclaration, JLocal>{}; 27 Map<ir.TreeNode, JLocal> _map = <ir.TreeNode, JLocal>{};
28 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap; 28 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap;
29 Set<ir.BreakStatement> _breaksAsContinue; 29 Set<ir.BreakStatement> _breaksAsContinue;
30 30
31 MemberEntity get currentMember => _members.last; 31 MemberEntity get currentMember => _members.last;
32 32
33 // TODO(johnniwinther): Compute this eagerly from the root of the member. 33 // TODO(johnniwinther): Compute this eagerly from the root of the member.
34 void _ensureJumpMap(ir.TreeNode node) { 34 void _ensureJumpMap(ir.TreeNode node) {
35 if (_jumpTargetMap == null) { 35 if (_jumpTargetMap == null) {
36 JumpVisitor visitor = new JumpVisitor(currentMember); 36 JumpVisitor visitor = new JumpVisitor(currentMember);
37 37
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return _jumpTargetMap[node]; 118 return _jumpTargetMap[node];
119 } 119 }
120 120
121 @override 121 @override
122 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) { 122 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) {
123 _ensureJumpMap(node); 123 _ensureJumpMap(node);
124 return _jumpTargetMap[node]; 124 return _jumpTargetMap[node];
125 } 125 }
126 126
127 @override 127 @override
128 Local getLocal(ir.VariableDeclaration node) { 128 Local getLocalVariable(ir.VariableDeclaration node) {
129 return _map.putIfAbsent(node, () { 129 return _map.putIfAbsent(node, () {
130 return new JLocal(node.name, currentMember); 130 return new JLocal(node.name, currentMember);
131 }); 131 });
132 } 132 }
133 133
134 @override 134 @override
135 Local getLocalFunction(ir.TreeNode node) {
136 assert(node is ir.FunctionDeclaration || node is ir.FunctionExpression,
137 failedAt(currentMember, 'Invalid local function node: $node'));
138 return _map.putIfAbsent(node, () {
139 String name;
140 if (node is ir.FunctionDeclaration) {
141 name = node.variable.name;
142 } else if (node is ir.FunctionExpression) {
143 name = '';
144 }
145 return new JLocal(name, currentMember);
146 });
147 }
148
149 @override
135 CapturedLoopScope getCapturedLoopScope( 150 CapturedLoopScope getCapturedLoopScope(
136 ClosureDataLookup closureLookup, ir.TreeNode node) { 151 ClosureDataLookup closureLookup, ir.TreeNode node) {
137 return closureLookup.getCapturedLoopScope(node); 152 return closureLookup.getCapturedLoopScope(node);
138 } 153 }
139 } 154 }
140 155
141 class JumpVisitor extends ir.Visitor { 156 class JumpVisitor extends ir.Visitor {
142 int index = 0; 157 int index = 0;
143 final MemberEntity member; 158 final MemberEntity member;
144 final Map<ir.TreeNode, JJumpTarget> jumpTargetMap = 159 final Map<ir.TreeNode, JJumpTarget> jumpTargetMap =
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 sb.write(memberContext.enclosingClass.name); 285 sb.write(memberContext.enclosingClass.name);
271 sb.write('.'); 286 sb.write('.');
272 } 287 }
273 sb.write(memberContext.name); 288 sb.write(memberContext.name);
274 sb.write('#'); 289 sb.write('#');
275 sb.write(name); 290 sb.write(name);
276 sb.write(')'); 291 sb.write(')');
277 return sb.toString(); 292 return sb.toString();
278 } 293 }
279 } 294 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/js_strategy.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