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

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

Issue 2978263003: Add nonboxed closure class fields. (Closed)
Patch Set: . Created 3 years, 5 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 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../closure.dart'; 7 import '../closure.dart';
8 import '../elements/entities.dart'; 8 import '../elements/entities.dart';
9 import '../kernel/element_map.dart'; 9 import '../kernel/element_map.dart';
10 import 'closure.dart'; 10 import 'closure.dart';
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 if (node is ir.Procedure) { 96 if (node is ir.Procedure) {
97 thisLocal = new ThisLocal(_kernelToElementMap.getMethod(node)); 97 thisLocal = new ThisLocal(_kernelToElementMap.getMethod(node));
98 } else if (node is ir.Field) { 98 } else if (node is ir.Field) {
99 thisLocal = new ThisLocal(_kernelToElementMap.getField(node)); 99 thisLocal = new ThisLocal(_kernelToElementMap.getField(node));
100 } 100 }
101 } else if (node is ir.Constructor) { 101 } else if (node is ir.Constructor) {
102 thisLocal = new ThisLocal(_kernelToElementMap.getConstructor(node)); 102 thisLocal = new ThisLocal(_kernelToElementMap.getConstructor(node));
103 } 103 }
104 104
105 assert(_scopeInfoMap[_nodeToEntity(node)] != null); 105 assert(_scopeInfoMap[_nodeToEntity(node)] != null);
106 KernelScopeInfo from = _scopeInfoMap[_nodeToEntity(node)];
106 _scopesCapturedInClosureMap[node] = new KernelCapturedScope( 107 _scopesCapturedInClosureMap[node] = new KernelCapturedScope(
107 capturedVariablesForScope, 108 capturedVariablesForScope,
108 _nodeToEntity(_executableContext), 109 _nodeToEntity(_executableContext),
110 from.localsUsedInTryOrSync,
111 from.freeVariables,
112 from.localsMap,
109 thisLocal); 113 thisLocal);
110 } 114 }
111 } 115 }
112 116
113 Entity _nodeToEntity(ir.Node node) { 117 Entity _nodeToEntity(ir.Node node) {
114 if (node is ir.Member) { 118 if (node is ir.Member) {
115 return _kernelToElementMap.getMember(node); 119 return _kernelToElementMap.getMember(node);
116 } else { 120 } else {
117 return _kernelToElementMap.getLocalFunction(node); 121 return _kernelToElementMap.getLocalFunction(node);
118 } 122 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 boxedLoopVariables.add(_localsMap.getLocal(variable)); 218 boxedLoopVariables.add(_localsMap.getLocal(variable));
215 } 219 }
216 } 220 }
217 }); 221 });
218 KernelCapturedScope scope = _scopesCapturedInClosureMap[node]; 222 KernelCapturedScope scope = _scopesCapturedInClosureMap[node];
219 if (scope == null) return; 223 if (scope == null) return;
220 _scopesCapturedInClosureMap[node] = new KernelCapturedLoopScope( 224 _scopesCapturedInClosureMap[node] = new KernelCapturedLoopScope(
221 scope.boxedVariables, 225 scope.boxedVariables,
222 boxedLoopVariables, 226 boxedLoopVariables,
223 scope.context, 227 scope.context,
228 scope.localsUsedInTryOrSync,
229 scope.freeVariables,
230 _localsMap,
224 scope.thisLocal); 231 scope.thisLocal);
225 } 232 }
226 233
227 void visitInvokable(ir.TreeNode node) { 234 void visitInvokable(ir.TreeNode node) {
228 bool oldIsInsideClosure = _isInsideClosure; 235 bool oldIsInsideClosure = _isInsideClosure;
229 ir.Node oldExecutableContext = _executableContext; 236 ir.Node oldExecutableContext = _executableContext;
230 KernelScopeInfo oldScopeInfo = _currentScopeInfo; 237 KernelScopeInfo oldScopeInfo = _currentScopeInfo;
231 238
232 // _outermostNode is only null the first time we enter the body of the 239 // _outermostNode is only null the first time we enter the body of the
233 // field, constructor, or method that is being analyzed. 240 // field, constructor, or method that is being analyzed.
234 _isInsideClosure = _outermostNode != null; 241 _isInsideClosure = _outermostNode != null;
235 _executableContext = node; 242 _executableContext = node;
236 _currentScopeInfo = new KernelScopeInfo(_nodeToThisLocal(node)); 243 _currentScopeInfo = new KernelScopeInfo(_nodeToThisLocal(node), _localsMap);
237 if (_isInsideClosure) { 244 if (_isInsideClosure) {
238 _closuresToGenerate[node] = _currentScopeInfo; 245 _closuresToGenerate[node] = _currentScopeInfo;
239 } else { 246 } else {
240 _outermostNode = node; 247 _outermostNode = node;
241 _scopeInfoMap[_originalEntity] = _currentScopeInfo; 248 _scopeInfoMap[_originalEntity] = _currentScopeInfo;
242 } 249 }
243 250
244 enterNewScope(node, () { 251 enterNewScope(node, () {
245 node.visitChildren(this); 252 node.visitChildren(this);
246 }); 253 });
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 nodeToConvert.isInstanceMember)) { 315 nodeToConvert.isInstanceMember)) {
309 return new ThisLocal(_kernelToElementMap.getConstructor(nodeToConvert)); 316 return new ThisLocal(_kernelToElementMap.getConstructor(nodeToConvert));
310 } else if (nodeToConvert is ir.Procedure && 317 } else if (nodeToConvert is ir.Procedure &&
311 nodeToConvert.isInstanceMember) { 318 nodeToConvert.isInstanceMember) {
312 return new ThisLocal(_kernelToElementMap.getMethod(nodeToConvert)); 319 return new ThisLocal(_kernelToElementMap.getMethod(nodeToConvert));
313 } 320 }
314 } 321 }
315 return null; 322 return null;
316 } 323 }
317 } 324 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/closure.dart ('k') | pkg/compiler/lib/src/kernel/element_map_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698