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

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

Issue 3002313002: Use KernelTypeGraphBuilder in KernelInferrerEngine (Closed)
Patch Set: Created 3 years, 3 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';
(...skipping 19 matching lines...) Expand all
30 "Locals map already created for $member."); 30 "Locals map already created for $member.");
31 _localsMaps[member] = localsMap; 31 _localsMaps[member] = localsMap;
32 } 32 }
33 } 33 }
34 34
35 class KernelToLocalsMapImpl implements KernelToLocalsMap { 35 class KernelToLocalsMapImpl implements KernelToLocalsMap {
36 final List<MemberEntity> _members = <MemberEntity>[]; 36 final List<MemberEntity> _members = <MemberEntity>[];
37 Map<ir.VariableDeclaration, JLocal> _map = <ir.VariableDeclaration, JLocal>{}; 37 Map<ir.VariableDeclaration, JLocal> _map = <ir.VariableDeclaration, JLocal>{};
38 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap; 38 Map<ir.TreeNode, JJumpTarget> _jumpTargetMap;
39 Set<ir.BreakStatement> _breaksAsContinue; 39 Set<ir.BreakStatement> _breaksAsContinue;
40 List<ir.VariableDeclaration> _parameterList = <ir.VariableDeclaration>[];
40 41
41 MemberEntity get currentMember => _members.last; 42 MemberEntity get currentMember => _members.last;
42 43
43 // TODO(johnniwinther): Compute this eagerly from the root of the member. 44 // TODO(johnniwinther): Compute this eagerly from the root of the member.
44 void _ensureJumpMap(ir.TreeNode node) { 45 void _ensureJumpMap(ir.TreeNode node) {
45 if (_jumpTargetMap == null) { 46 if (_jumpTargetMap == null) {
46 JumpVisitor visitor = new JumpVisitor(currentMember); 47 JumpVisitor visitor = new JumpVisitor(currentMember);
47 48
48 // Find the root node for the current member. 49 // Find the root node for the current member.
49 while (node is! ir.Member) { 50 while (node is! ir.Member) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 131
131 @override 132 @override
132 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) { 133 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) {
133 _ensureJumpMap(node); 134 _ensureJumpMap(node);
134 return _jumpTargetMap[node]; 135 return _jumpTargetMap[node];
135 } 136 }
136 137
137 @override 138 @override
138 Local getLocalVariable(ir.VariableDeclaration node) { 139 Local getLocalVariable(ir.VariableDeclaration node) {
139 return _map.putIfAbsent(node, () { 140 return _map.putIfAbsent(node, () {
140 return new JLocal( 141 Local local;
141 node.name, currentMember, node.parent is ir.FunctionNode); 142 if (node.parent is ir.FunctionNode) {
143 local = new JParameter(_parameterList.length, node.name, currentMember);
144 _parameterList.add(node);
145 } else {
146 local = new JLocal(node.name, currentMember);
147 }
148 return local;
142 }); 149 });
143 } 150 }
144 151
145 @override 152 @override
153 ir.FunctionNode getFunctionNodeForParameter(covariant JParameter parameter) {
154 return _parameterList[parameter.parameterIndex].parent;
155 }
156
157 ir.DartType getParameterType(covariant JParameter parameter) {
158 return _parameterList[parameter.parameterIndex].type;
159 }
160
161 @override
146 CapturedLoopScope getCapturedLoopScope( 162 CapturedLoopScope getCapturedLoopScope(
147 ClosureDataLookup closureLookup, ir.TreeNode node) { 163 ClosureDataLookup closureLookup, ir.TreeNode node) {
148 return closureLookup.getCapturedLoopScope(node); 164 return closureLookup.getCapturedLoopScope(node);
149 } 165 }
150 166
151 @override 167 @override
152 ClosureRepresentationInfo getClosureRepresentationInfo( 168 ClosureRepresentationInfo getClosureRepresentationInfo(
153 ClosureDataLookup closureLookup, ir.TreeNode node) { 169 ClosureDataLookup closureLookup, ir.TreeNode node) {
154 return closureLookup.getClosureInfo(node); 170 return closureLookup.getClosureInfo(node);
155 } 171 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 sb.write(isContinueTarget); 356 sb.write(isContinueTarget);
341 sb.write(')'); 357 sb.write(')');
342 return sb.toString(); 358 return sb.toString();
343 } 359 }
344 } 360 }
345 361
346 class JLocal implements Local { 362 class JLocal implements Local {
347 final String name; 363 final String name;
348 final MemberEntity memberContext; 364 final MemberEntity memberContext;
349 365
366 JLocal(this.name, this.memberContext);
367
350 /// True if this local represents a local parameter. 368 /// True if this local represents a local parameter.
351 final bool isRegularParameter; 369 bool get isRegularParameter => false;
352
353 JLocal(this.name, this.memberContext, [isParameter = false])
354 : isRegularParameter = isParameter;
355 370
356 @override 371 @override
357 Entity get executableContext => memberContext; 372 Entity get executableContext => memberContext;
358 373
374 String get _kind => 'local';
375
359 String toString() { 376 String toString() {
360 StringBuffer sb = new StringBuffer(); 377 StringBuffer sb = new StringBuffer();
361 sb.write('local('); 378 sb.write('$_kind(');
362 if (memberContext.enclosingClass != null) { 379 if (memberContext.enclosingClass != null) {
363 sb.write(memberContext.enclosingClass.name); 380 sb.write(memberContext.enclosingClass.name);
364 sb.write('.'); 381 sb.write('.');
365 } 382 }
366 sb.write(memberContext.name); 383 sb.write(memberContext.name);
367 sb.write('#'); 384 sb.write('#');
368 sb.write(name); 385 sb.write(name);
369 sb.write(')'); 386 sb.write(')');
370 return sb.toString(); 387 return sb.toString();
371 } 388 }
372 } 389 }
390
391 class JParameter extends JLocal {
392 final int parameterIndex;
393
394 JParameter(this.parameterIndex, String name, MemberEntity memberContext)
395 : super(name, memberContext);
396
397 bool get isRegularParameter => true;
398
399 String get _kind => 'parameter';
400 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698