| 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 '../common/tasks.dart'; | 8 import '../common/tasks.dart'; |
| 9 import '../elements/entities.dart'; | 9 import '../elements/entities.dart'; |
| 10 import '../kernel/element_map.dart'; | 10 import '../kernel/element_map.dart'; |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 | 138 |
| 139 @override | 139 @override |
| 140 // TODO(efortuna): Eventually closureScopeMap[node] should always be non-null, | 140 // TODO(efortuna): Eventually closureScopeMap[node] should always be non-null, |
| 141 // and we should just test that with an assert. | 141 // and we should just test that with an assert. |
| 142 LoopClosureScope getLoopClosureScope(ir.Node loopNode) => | 142 LoopClosureScope getLoopClosureScope(ir.Node loopNode) => |
| 143 _closureScopeMap[loopNode] ?? const LoopClosureScope(); | 143 _closureScopeMap[loopNode] ?? const LoopClosureScope(); |
| 144 | 144 |
| 145 @override | 145 @override |
| 146 // TODO(efortuna): Eventually closureRepresentationMap[node] should always be | 146 // TODO(efortuna): Eventually closureRepresentationMap[node] should always be |
| 147 // non-null, and we should just test that with an assert. | 147 // non-null, and we should just test that with an assert. |
| 148 ClosureRepresentationInfo getClosureRepresentationInfo(Entity entity) => | 148 ClosureRepresentationInfo getClosureRepresentationInfo(Entity entity) { |
| 149 _closureRepresentationMap[entity] ?? const ClosureRepresentationInfo(); | 149 // TODO(johnniwinther): Remove this check when constructor bodies a created |
| 150 // eagerly with the J-model; a constructor body should have it's own |
| 151 // [ClosureRepresentationInfo]. |
| 152 if (entity is ConstructorBodyEntity) { |
| 153 ConstructorBodyEntity constructorBody = entity; |
| 154 entity = constructorBody.constructor; |
| 155 } |
| 156 return _closureRepresentationMap[entity] ?? |
| 157 const ClosureRepresentationInfo(); |
| 158 } |
| 150 } | 159 } |
| 151 | 160 |
| 152 class KernelScopeInfo extends ScopeInfo { | 161 class KernelScopeInfo extends ScopeInfo { |
| 153 final Set<Local> localsUsedInTryOrSync; | 162 final Set<Local> localsUsedInTryOrSync; |
| 154 final Local thisLocal; | 163 final Local thisLocal; |
| 155 final Set<Local> boxedVariables; | 164 final Set<Local> boxedVariables; |
| 156 | 165 |
| 157 /// The set of variables that were defined in another scope, but are used in | 166 /// The set of variables that were defined in another scope, but are used in |
| 158 /// this scope. | 167 /// this scope. |
| 159 Set<ir.VariableDeclaration> freeVariables = new Set<ir.VariableDeclaration>(); | 168 Set<ir.VariableDeclaration> freeVariables = new Set<ir.VariableDeclaration>(); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 // TODO(efortuna): Implement. | 252 // TODO(efortuna): Implement. |
| 244 bool isVariableBoxed(Local variable) => false; | 253 bool isVariableBoxed(Local variable) => false; |
| 245 | 254 |
| 246 // TODO(efortuna): Implement. | 255 // TODO(efortuna): Implement. |
| 247 // Why is this closure not actually a closure? Well, to properly call | 256 // Why is this closure not actually a closure? Well, to properly call |
| 248 // ourselves a closure, we need to register the new closure class with the | 257 // ourselves a closure, we need to register the new closure class with the |
| 249 // ClosedWorldRefiner, which currently only takes elements. The change to | 258 // ClosedWorldRefiner, which currently only takes elements. The change to |
| 250 // that (and the subsequent adjustment here) will follow soon. | 259 // that (and the subsequent adjustment here) will follow soon. |
| 251 bool get isClosure => false; | 260 bool get isClosure => false; |
| 252 } | 261 } |
| OLD | NEW |