Chromium Code Reviews| 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 /*assert( |
|
Siggi Cherem (dart-lang)
2017/08/25 18:19:11
TODO? does it happen because of some of the change
Johnni Winther
2017/08/25 18:32:20
Adding a TODO. We are moving towards using getScop
| |
| 197 closure != null, | 197 closure != null, |
| 198 "Corresponding closure class not found for $entity. " | 198 "Corresponding closure class not found for $entity. " |
| 199 "Closures found for ${_memberClosureRepresentationMap.keys}"); | 199 "Closures found for ${_memberClosureRepresentationMap.keys}");*/ |
| 200 return closure; | 200 return closure ?? const ClosureRepresentationInfo(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 @override | 203 @override |
| 204 ClosureRepresentationInfo getClosureInfo(ir.Node node) { | 204 ClosureRepresentationInfo getClosureInfo(ir.Node node) { |
| 205 var closure = _localClosureRepresentationMap[node]; | 205 var closure = _localClosureRepresentationMap[node]; |
| 206 assert( | 206 assert( |
| 207 closure != null, | 207 closure != null, |
| 208 "Corresponding closure class not found for $node. " | 208 "Corresponding closure class not found for $node. " |
| 209 "Closures found for ${_localClosureRepresentationMap.keys}"); | 209 "Closures found for ${_localClosureRepresentationMap.keys}"); |
| 210 return closure; | 210 return closure; |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 519 class ClosureFieldData extends ClosureMemberData implements FieldData { | 519 class ClosureFieldData extends ClosureMemberData implements FieldData { |
| 520 ClosureFieldData(MemberDefinition definition) : super(definition); | 520 ClosureFieldData(MemberDefinition definition) : super(definition); |
| 521 | 521 |
| 522 @override | 522 @override |
| 523 DartType getFieldType(KernelToElementMap elementMap) { | 523 DartType getFieldType(KernelToElementMap elementMap) { |
| 524 // A closure field doesn't have a Dart type. | 524 // A closure field doesn't have a Dart type. |
| 525 return null; | 525 return null; |
| 526 } | 526 } |
| 527 | 527 |
| 528 @override | 528 @override |
| 529 ConstantExpression getFieldConstant( | 529 ConstantExpression getFieldConstantExpression(KernelToElementMap elementMap) { |
| 530 KernelToElementMap elementMap, FieldEntity field) { | |
| 531 failedAt( | 530 failedAt( |
| 532 field, | 531 definition.member, |
| 533 "Unexpected field $field in " | 532 "Unexpected field ${definition.member} in " |
| 534 "ClosureFieldData.getFieldConstant"); | 533 "ClosureFieldData.getFieldConstantExpression"); |
| 534 return null; | |
| 535 } | |
| 536 | |
| 537 @override | |
| 538 ConstantValue getConstantFieldInitializer(KernelToElementMap elementMap) { | |
| 539 failedAt( | |
| 540 definition.member, | |
| 541 "Unexpected field ${definition.member} in " | |
| 542 "ClosureFieldData.getConstantFieldInitializer"); | |
| 543 return null; | |
| 544 } | |
| 545 | |
| 546 @override | |
| 547 bool hasConstantFieldInitializer(KernelToElementMap elementMap) { | |
| 548 return false; | |
| 549 } | |
| 550 | |
| 551 @override | |
| 552 ConstantValue getFieldConstantValue(KernelToElementMap elementMap) { | |
| 535 return null; | 553 return null; |
| 536 } | 554 } |
| 537 } | 555 } |
| 538 | 556 |
| 539 class ClosureMemberDefinition implements MemberDefinition { | 557 class ClosureMemberDefinition implements MemberDefinition { |
| 540 final MemberEntity member; | 558 final MemberEntity member; |
| 541 final SourceSpan location; | 559 final SourceSpan location; |
| 542 final MemberKind kind; | 560 final MemberKind kind; |
| 543 final ir.Node node; | 561 final ir.Node node; |
| 544 | 562 |
| 545 ClosureMemberDefinition(this.member, this.location, this.kind, this.node); | 563 ClosureMemberDefinition(this.member, this.location, this.kind, this.node); |
| 546 | 564 |
| 547 String toString() => | 565 String toString() => |
| 548 'ClosureMemberDefinition(kind:$kind,member:$member,location:$location)'; | 566 'ClosureMemberDefinition(kind:$kind,member:$member,location:$location)'; |
| 549 } | 567 } |
| 550 | 568 |
| 551 /// Collection of scope data collected for a single member. | 569 /// Collection of scope data collected for a single member. |
| 552 class ScopeModel { | 570 class ScopeModel { |
| 553 /// Collection [ScopeInfo] data for the member. | 571 /// Collection [ScopeInfo] data for the member. |
| 554 KernelScopeInfo scopeInfo; | 572 KernelScopeInfo scopeInfo; |
| 555 | 573 |
| 556 /// Collected [CapturedScope] data for nodes. | 574 /// Collected [CapturedScope] data for nodes. |
| 557 Map<ir.Node, KernelCapturedScope> capturedScopesMap = | 575 Map<ir.Node, KernelCapturedScope> capturedScopesMap = |
| 558 <ir.Node, KernelCapturedScope>{}; | 576 <ir.Node, KernelCapturedScope>{}; |
| 559 | 577 |
| 560 /// Collected [ScopeInfo] data for nodes. | 578 /// Collected [ScopeInfo] data for nodes. |
| 561 Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate = | 579 Map<ir.FunctionNode, KernelScopeInfo> closuresToGenerate = |
| 562 <ir.FunctionNode, KernelScopeInfo>{}; | 580 <ir.FunctionNode, KernelScopeInfo>{}; |
| 563 } | 581 } |
| OLD | NEW |