| 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 part of world_builder; | 5 part of world_builder; |
| 6 | 6 |
| 7 /// World builder specific to codegen. | 7 /// World builder specific to codegen. |
| 8 /// | 8 /// |
| 9 /// This adds additional access to liveness of selectors and elements. | 9 /// This adds additional access to liveness of selectors and elements. |
| 10 abstract class CodegenWorldBuilder implements WorldBuilder { | 10 abstract class CodegenWorldBuilder implements WorldBuilder { |
| 11 /// Calls [f] with every instance field, together with its declarer, in an | 11 /// Calls [f] with every instance field, together with its declarer, in an |
| 12 /// instance of [cls]. | 12 /// instance of [cls]. |
| 13 void forEachInstanceField(covariant ClassEntity cls, | 13 void forEachInstanceField(covariant ClassEntity cls, |
| 14 void f(ClassEntity declarer, FieldEntity field)); | 14 void f(ClassEntity declarer, FieldEntity field)); |
| 15 | 15 |
| 16 /// Calls [f] for each parameter of [function] providing the type and name of | 16 /// Calls [f] for each parameter of [function] providing the type and name of |
| 17 /// the parameter and the [defaultValue] if the parameter is optional. | 17 /// the parameter and the [defaultValue] if the parameter is optional. |
| 18 void forEachParameter(covariant FunctionEntity function, | 18 void forEachParameter(covariant FunctionEntity function, |
| 19 void f(DartType type, String name, ConstantValue defaultValue)); | 19 void f(DartType type, String name, ConstantValue defaultValue)); |
| 20 | 20 |
| 21 /// Calls [f] for each parameter - given as a [Local] - of [function]. |
| 22 void forEachParameterAsLocal( |
| 23 covariant FunctionEntity function, void f(Local parameter)); |
| 24 |
| 21 void forEachInvokedName( | 25 void forEachInvokedName( |
| 22 f(String name, Map<Selector, SelectorConstraints> selectors)); | 26 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 23 | 27 |
| 24 void forEachInvokedGetter( | 28 void forEachInvokedGetter( |
| 25 f(String name, Map<Selector, SelectorConstraints> selectors)); | 29 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 26 | 30 |
| 27 void forEachInvokedSetter( | 31 void forEachInvokedSetter( |
| 28 f(String name, Map<Selector, SelectorConstraints> selectors)); | 32 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 29 | 33 |
| 30 /// Returns `true` if [field] has a constant initializer. | 34 /// Returns `true` if [field] has a constant initializer. |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 /// instance of [cls]. | 581 /// instance of [cls]. |
| 578 void forEachInstanceField( | 582 void forEachInstanceField( |
| 579 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) { | 583 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) { |
| 580 cls.implementation | 584 cls.implementation |
| 581 .forEachInstanceField(f, includeSuperAndInjectedMembers: true); | 585 .forEachInstanceField(f, includeSuperAndInjectedMembers: true); |
| 582 } | 586 } |
| 583 | 587 |
| 584 @override | 588 @override |
| 585 void forEachParameter(MethodElement function, | 589 void forEachParameter(MethodElement function, |
| 586 void f(DartType type, String name, ConstantValue defaultValue)) { | 590 void f(DartType type, String name, ConstantValue defaultValue)) { |
| 591 if (!function.hasFunctionSignature) return; |
| 592 function = function.implementation; |
| 587 FunctionSignature parameters = function.functionSignature; | 593 FunctionSignature parameters = function.functionSignature; |
| 588 parameters.orderedForEachParameter((_parameter) { | 594 parameters.orderedForEachParameter((_parameter) { |
| 589 ParameterElement parameter = _parameter; | 595 ParameterElement parameter = _parameter; |
| 590 ConstantValue value; | 596 ConstantValue value; |
| 591 if (parameter.isOptional) { | 597 if (parameter.isOptional) { |
| 592 value = _constants.getConstantValue(parameter.constant); | 598 value = _constants.getConstantValue(parameter.constant); |
| 593 } | 599 } |
| 594 f(parameter.type, parameter.name, value); | 600 f(parameter.type, parameter.name, value); |
| 595 }); | 601 }); |
| 596 } | 602 } |
| 597 | 603 |
| 598 @override | 604 @override |
| 605 void forEachParameterAsLocal( |
| 606 MethodElement function, void f(Local parameter)) { |
| 607 if (!function.hasFunctionSignature) return; |
| 608 function = function.implementation; |
| 609 FunctionSignature parameters = function.functionSignature; |
| 610 parameters.orderedForEachParameter((_parameter) { |
| 611 ParameterElement parameter = _parameter; |
| 612 f(parameter); |
| 613 }); |
| 614 } |
| 615 |
| 616 @override |
| 599 void _processInstantiatedClassMember( | 617 void _processInstantiatedClassMember( |
| 600 ClassEntity cls, MemberElement member, MemberUsedCallback memberUsed) { | 618 ClassEntity cls, MemberElement member, MemberUsedCallback memberUsed) { |
| 601 assert(member.isDeclaration, failedAt(member)); | 619 assert(member.isDeclaration, failedAt(member)); |
| 602 if (member.isMalformed) return; | 620 if (member.isMalformed) return; |
| 603 super._processInstantiatedClassMember(cls, member, memberUsed); | 621 super._processInstantiatedClassMember(cls, member, memberUsed); |
| 604 } | 622 } |
| 605 | 623 |
| 606 @override | 624 @override |
| 607 _MemberUsage _getMemberUsage( | 625 _MemberUsage _getMemberUsage( |
| 608 MemberElement member, MemberUsedCallback memberUsed) { | 626 MemberElement member, MemberUsedCallback memberUsed) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 return _elementMap.getConstantFieldInitializer(field); | 666 return _elementMap.getConstantFieldInitializer(field); |
| 649 } | 667 } |
| 650 | 668 |
| 651 @override | 669 @override |
| 652 void forEachParameter(FunctionEntity function, | 670 void forEachParameter(FunctionEntity function, |
| 653 void f(DartType type, String name, ConstantValue defaultValue)) { | 671 void f(DartType type, String name, ConstantValue defaultValue)) { |
| 654 _elementMap.forEachParameter(function, f); | 672 _elementMap.forEachParameter(function, f); |
| 655 } | 673 } |
| 656 | 674 |
| 657 @override | 675 @override |
| 676 void forEachParameterAsLocal( |
| 677 FunctionEntity function, void f(Local parameter)) { |
| 678 throw new UnimplementedError( |
| 679 'KernelCodegenWorldBuilder.forEachParameterAsLocal'); |
| 680 } |
| 681 |
| 682 @override |
| 658 void forEachInstanceField( | 683 void forEachInstanceField( |
| 659 ClassEntity cls, void f(ClassEntity declarer, FieldEntity field)) { | 684 ClassEntity cls, void f(ClassEntity declarer, FieldEntity field)) { |
| 660 _elementEnvironment.forEachClassMember(cls, | 685 _elementEnvironment.forEachClassMember(cls, |
| 661 (ClassEntity declarer, MemberEntity member) { | 686 (ClassEntity declarer, MemberEntity member) { |
| 662 if (member.isField && member.isInstanceMember) f(declarer, member); | 687 if (member.isField && member.isInstanceMember) f(declarer, member); |
| 663 }); | 688 }); |
| 664 } | 689 } |
| 665 } | 690 } |
| OLD | NEW |