| 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.dart'; | 8 import '../common.dart'; |
| 9 import '../common/tasks.dart'; | 9 import '../common/tasks.dart'; |
| 10 import '../constants/expressions.dart'; | 10 import '../constants/expressions.dart'; |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 186 |
| 187 @override | 187 @override |
| 188 // TODO(efortuna): Eventually capturedScopesMap[node] should always | 188 // TODO(efortuna): Eventually capturedScopesMap[node] should always |
| 189 // be non-null, and we should just test that with an assert. | 189 // be non-null, and we should just test that with an assert. |
| 190 CapturedLoopScope getCapturedLoopScope(ir.Node loopNode) => | 190 CapturedLoopScope getCapturedLoopScope(ir.Node loopNode) => |
| 191 _capturedScopesMap[loopNode] ?? const CapturedLoopScope(); | 191 _capturedScopesMap[loopNode] ?? const CapturedLoopScope(); |
| 192 | 192 |
| 193 @override | 193 @override |
| 194 ClosureRepresentationInfo getClosureInfoForMember(MemberEntity entity) { | 194 ClosureRepresentationInfo getClosureInfoForMember(MemberEntity entity) { |
| 195 var closure = _memberClosureRepresentationMap[entity]; | 195 var closure = _memberClosureRepresentationMap[entity]; |
| 196 assert( | 196 // TODO(johnniwinther): Re-insert assertion or remove |
| 197 // [getClosureInfoForMember]. |
| 198 /*assert( |
| 197 closure != null, | 199 closure != null, |
| 198 "Corresponding closure class not found for $entity. " | 200 "Corresponding closure class not found for $entity. " |
| 199 "Closures found for ${_memberClosureRepresentationMap.keys}"); | 201 "Closures found for ${_memberClosureRepresentationMap.keys}");*/ |
| 200 return closure; | 202 return closure ?? const ClosureRepresentationInfo(); |
| 201 } | 203 } |
| 202 | 204 |
| 203 @override | 205 @override |
| 204 ClosureRepresentationInfo getClosureInfo(ir.Node node) { | 206 ClosureRepresentationInfo getClosureInfo(ir.Node node) { |
| 205 var closure = _localClosureRepresentationMap[node]; | 207 var closure = _localClosureRepresentationMap[node]; |
| 206 assert( | 208 assert( |
| 207 closure != null, | 209 closure != null, |
| 208 "Corresponding closure class not found for $node. " | 210 "Corresponding closure class not found for $node. " |
| 209 "Closures found for ${_localClosureRepresentationMap.keys}"); | 211 "Closures found for ${_localClosureRepresentationMap.keys}"); |
| 210 return closure; | 212 return closure; |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 class ClosureFieldData extends ClosureMemberData implements FieldData { | 521 class ClosureFieldData extends ClosureMemberData implements FieldData { |
| 520 ClosureFieldData(MemberDefinition definition) : super(definition); | 522 ClosureFieldData(MemberDefinition definition) : super(definition); |
| 521 | 523 |
| 522 @override | 524 @override |
| 523 DartType getFieldType(KernelToElementMap elementMap) { | 525 DartType getFieldType(KernelToElementMap elementMap) { |
| 524 // A closure field doesn't have a Dart type. | 526 // A closure field doesn't have a Dart type. |
| 525 return null; | 527 return null; |
| 526 } | 528 } |
| 527 | 529 |
| 528 @override | 530 @override |
| 529 ConstantExpression getFieldConstant( | 531 ConstantExpression getFieldConstantExpression(KernelToElementMap elementMap) { |
| 530 KernelToElementMap elementMap, FieldEntity field) { | |
| 531 failedAt( | 532 failedAt( |
| 532 field, | 533 definition.member, |
| 533 "Unexpected field $field in " | 534 "Unexpected field ${definition.member} in " |
| 534 "ClosureFieldData.getFieldConstant"); | 535 "ClosureFieldData.getFieldConstantExpression"); |
| 536 return null; |
| 537 } |
| 538 |
| 539 @override |
| 540 ConstantValue getConstantFieldInitializer(KernelToElementMap elementMap) { |
| 541 failedAt( |
| 542 definition.member, |
| 543 "Unexpected field ${definition.member} in " |
| 544 "ClosureFieldData.getConstantFieldInitializer"); |
| 545 return null; |
| 546 } |
| 547 |
| 548 @override |
| 549 bool hasConstantFieldInitializer(KernelToElementMap elementMap) { |
| 550 return false; |
| 551 } |
| 552 |
| 553 @override |
| 554 ConstantValue getFieldConstantValue(KernelToElementMap elementMap) { |
| 535 return null; | 555 return null; |
| 536 } | 556 } |
| 537 } | 557 } |
| 538 | 558 |
| 539 class ClosureMemberDefinition implements MemberDefinition { | 559 class ClosureMemberDefinition implements MemberDefinition { |
| 540 final MemberEntity member; | 560 final MemberEntity member; |
| 541 final SourceSpan location; | 561 final SourceSpan location; |
| 542 final MemberKind kind; | 562 final MemberKind kind; |
| 543 final ir.Node node; | 563 final ir.Node node; |
| 544 | 564 |
| 545 ClosureMemberDefinition(this.member, this.location, this.kind, this.node); | 565 ClosureMemberDefinition(this.member, this.location, this.kind, this.node); |
| 546 | 566 |
| 547 String toString() => | 567 String toString() => |
| 548 'ClosureMemberDefinition(kind:$kind,member:$member,location:$location)'; | 568 'ClosureMemberDefinition(kind:$kind,member:$member,location:$location)'; |
| 549 } | 569 } |
| 550 | 570 |
| 551 /// Collection of scope data collected for a single member. | 571 /// Collection of scope data collected for a single member. |
| 552 class ScopeModel { | 572 class ScopeModel { |
| 553 /// Collection [ScopeInfo] data for the member. | 573 /// Collection [ScopeInfo] data for the member. |
| 554 KernelScopeInfo scopeInfo; | 574 KernelScopeInfo scopeInfo; |
| 555 | 575 |
| 556 /// Collected [CapturedScope] data for nodes. | 576 /// Collected [CapturedScope] data for nodes. |
| 557 Map<ir.Node, KernelCapturedScope> capturedScopesMap = | 577 Map<ir.Node, KernelCapturedScope> capturedScopesMap = |
| 558 <ir.Node, KernelCapturedScope>{}; | 578 <ir.Node, KernelCapturedScope>{}; |
| 559 | 579 |
| 560 /// Collected [ScopeInfo] data for nodes. | 580 /// Collected [ScopeInfo] data for nodes. |
| 561 Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate = | 581 Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate = |
| 562 <ir.FunctionNode, KernelScopeInfo>{}; | 582 <ir.FunctionNode, KernelScopeInfo>{}; |
| 563 } | 583 } |
| OLD | NEW |