| OLD | NEW |
| 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 Loading... |
| 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)]; | |
| 107 _scopesCapturedInClosureMap[node] = new KernelCapturedScope( | 106 _scopesCapturedInClosureMap[node] = new KernelCapturedScope( |
| 108 capturedVariablesForScope, | 107 capturedVariablesForScope, |
| 109 _nodeToEntity(_executableContext), | 108 _nodeToEntity(_executableContext), |
| 110 from.localsUsedInTryOrSync, | |
| 111 from.freeVariables, | |
| 112 from.localsMap, | |
| 113 thisLocal); | 109 thisLocal); |
| 114 } | 110 } |
| 115 } | 111 } |
| 116 | 112 |
| 117 Entity _nodeToEntity(ir.Node node) { | 113 Entity _nodeToEntity(ir.Node node) { |
| 118 if (node is ir.Member) { | 114 if (node is ir.Member) { |
| 119 return _kernelToElementMap.getMember(node); | 115 return _kernelToElementMap.getMember(node); |
| 120 } else { | 116 } else { |
| 121 return _kernelToElementMap.getLocalFunction(node); | 117 return _kernelToElementMap.getLocalFunction(node); |
| 122 } | 118 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 boxedLoopVariables.add(_localsMap.getLocal(variable)); | 214 boxedLoopVariables.add(_localsMap.getLocal(variable)); |
| 219 } | 215 } |
| 220 } | 216 } |
| 221 }); | 217 }); |
| 222 KernelCapturedScope scope = _scopesCapturedInClosureMap[node]; | 218 KernelCapturedScope scope = _scopesCapturedInClosureMap[node]; |
| 223 if (scope == null) return; | 219 if (scope == null) return; |
| 224 _scopesCapturedInClosureMap[node] = new KernelCapturedLoopScope( | 220 _scopesCapturedInClosureMap[node] = new KernelCapturedLoopScope( |
| 225 scope.boxedVariables, | 221 scope.boxedVariables, |
| 226 boxedLoopVariables, | 222 boxedLoopVariables, |
| 227 scope.context, | 223 scope.context, |
| 228 scope.localsUsedInTryOrSync, | |
| 229 scope.freeVariables, | |
| 230 _localsMap, | |
| 231 scope.thisLocal); | 224 scope.thisLocal); |
| 232 } | 225 } |
| 233 | 226 |
| 234 void visitInvokable(ir.TreeNode node) { | 227 void visitInvokable(ir.TreeNode node) { |
| 235 bool oldIsInsideClosure = _isInsideClosure; | 228 bool oldIsInsideClosure = _isInsideClosure; |
| 236 ir.Node oldExecutableContext = _executableContext; | 229 ir.Node oldExecutableContext = _executableContext; |
| 237 KernelScopeInfo oldScopeInfo = _currentScopeInfo; | 230 KernelScopeInfo oldScopeInfo = _currentScopeInfo; |
| 238 | 231 |
| 239 // _outermostNode is only null the first time we enter the body of the | 232 // _outermostNode is only null the first time we enter the body of the |
| 240 // field, constructor, or method that is being analyzed. | 233 // field, constructor, or method that is being analyzed. |
| 241 _isInsideClosure = _outermostNode != null; | 234 _isInsideClosure = _outermostNode != null; |
| 242 _executableContext = node; | 235 _executableContext = node; |
| 243 _currentScopeInfo = new KernelScopeInfo(_nodeToThisLocal(node), _localsMap); | 236 _currentScopeInfo = new KernelScopeInfo(_nodeToThisLocal(node)); |
| 244 if (_isInsideClosure) { | 237 if (_isInsideClosure) { |
| 245 _closuresToGenerate[node] = _currentScopeInfo; | 238 _closuresToGenerate[node] = _currentScopeInfo; |
| 246 } else { | 239 } else { |
| 247 _outermostNode = node; | 240 _outermostNode = node; |
| 248 _scopeInfoMap[_originalEntity] = _currentScopeInfo; | 241 _scopeInfoMap[_originalEntity] = _currentScopeInfo; |
| 249 } | 242 } |
| 250 | 243 |
| 251 enterNewScope(node, () { | 244 enterNewScope(node, () { |
| 252 node.visitChildren(this); | 245 node.visitChildren(this); |
| 253 }); | 246 }); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 nodeToConvert.isInstanceMember)) { | 308 nodeToConvert.isInstanceMember)) { |
| 316 return new ThisLocal(_kernelToElementMap.getConstructor(nodeToConvert)); | 309 return new ThisLocal(_kernelToElementMap.getConstructor(nodeToConvert)); |
| 317 } else if (nodeToConvert is ir.Procedure && | 310 } else if (nodeToConvert is ir.Procedure && |
| 318 nodeToConvert.isInstanceMember) { | 311 nodeToConvert.isInstanceMember) { |
| 319 return new ThisLocal(_kernelToElementMap.getMethod(nodeToConvert)); | 312 return new ThisLocal(_kernelToElementMap.getMethod(nodeToConvert)); |
| 320 } | 313 } |
| 321 } | 314 } |
| 322 return null; | 315 return null; |
| 323 } | 316 } |
| 324 } | 317 } |
| OLD | NEW |