| 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( | 13 void forEachInstanceField( |
| 14 ClassEntity cls, void f(ClassEntity declarer, FieldEntity field)); | 14 ClassEntity cls, 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(FunctionEntity function, | 18 void forEachParameter(FunctionEntity function, |
| 19 void f(DartType type, String name, ConstantValue defaultValue)); | 19 void f(DartType type, String name, ConstantValue defaultValue)); |
| 20 | 20 |
| 21 void forEachInvokedName( | 21 void forEachInvokedName( |
| 22 f(String name, Map<Selector, SelectorConstraints> selectors)); | 22 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 23 | 23 |
| 24 void forEachInvokedGetter( | 24 void forEachInvokedGetter( |
| 25 f(String name, Map<Selector, SelectorConstraints> selectors)); | 25 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 26 | 26 |
| 27 void forEachInvokedSetter( | 27 void forEachInvokedSetter( |
| 28 f(String name, Map<Selector, SelectorConstraints> selectors)); | 28 f(String name, Map<Selector, SelectorConstraints> selectors)); |
| 29 | 29 |
| 30 /// Returns `true` if [field] constant or final with a constant initializer. | 30 /// Returns `true` if [field] has a constant initializer. |
| 31 bool hasConstantFieldInitializer(FieldEntity field); | 31 bool hasConstantFieldInitializer(FieldEntity field); |
| 32 | 32 |
| 33 /// Returns the constant initializer for [field]. |
| 34 ConstantValue getConstantFieldInitializer(FieldEntity field); |
| 35 |
| 33 /// Returns `true` if [member] is invoked as a setter. | 36 /// Returns `true` if [member] is invoked as a setter. |
| 34 bool hasInvokedSetter(MemberEntity member, ClosedWorld world); | 37 bool hasInvokedSetter(MemberEntity member, ClosedWorld world); |
| 35 | 38 |
| 36 bool hasInvokedGetter(MemberEntity member, ClosedWorld world); | 39 bool hasInvokedGetter(MemberEntity member, ClosedWorld world); |
| 37 | 40 |
| 38 Map<Selector, SelectorConstraints> invocationsByName(String name); | 41 Map<Selector, SelectorConstraints> invocationsByName(String name); |
| 39 | 42 |
| 40 Map<Selector, SelectorConstraints> getterInvocationsByName(String name); | 43 Map<Selector, SelectorConstraints> getterInvocationsByName(String name); |
| 41 | 44 |
| 42 Map<Selector, SelectorConstraints> setterInvocationsByName(String name); | 45 Map<Selector, SelectorConstraints> setterInvocationsByName(String name); |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 ClosedWorld world, | 557 ClosedWorld world, |
| 555 SelectorConstraintsStrategy selectorConstraintsStrategy) | 558 SelectorConstraintsStrategy selectorConstraintsStrategy) |
| 556 : super(elementEnvironment, nativeBasicData, world, | 559 : super(elementEnvironment, nativeBasicData, world, |
| 557 selectorConstraintsStrategy); | 560 selectorConstraintsStrategy); |
| 558 | 561 |
| 559 @override | 562 @override |
| 560 bool hasConstantFieldInitializer(FieldElement field) { | 563 bool hasConstantFieldInitializer(FieldElement field) { |
| 561 return field.constant != null; | 564 return field.constant != null; |
| 562 } | 565 } |
| 563 | 566 |
| 567 @override |
| 568 ConstantValue getConstantFieldInitializer(FieldElement field) { |
| 569 assert(field.constant != null, |
| 570 failedAt(field, "Field $field doesn't have a constant initial value.")); |
| 571 return _constants.getConstantValue(field.constant); |
| 572 } |
| 573 |
| 564 /// Calls [f] with every instance field, together with its declarer, in an | 574 /// Calls [f] with every instance field, together with its declarer, in an |
| 565 /// instance of [cls]. | 575 /// instance of [cls]. |
| 566 void forEachInstanceField( | 576 void forEachInstanceField( |
| 567 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) { | 577 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) { |
| 568 cls.implementation | 578 cls.implementation |
| 569 .forEachInstanceField(f, includeSuperAndInjectedMembers: true); | 579 .forEachInstanceField(f, includeSuperAndInjectedMembers: true); |
| 570 } | 580 } |
| 571 | 581 |
| 572 @override | 582 @override |
| 573 void forEachParameter(MethodElement function, | 583 void forEachParameter(MethodElement function, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 SelectorConstraintsStrategy selectorConstraintsStrategy) | 637 SelectorConstraintsStrategy selectorConstraintsStrategy) |
| 628 : super(elementEnvironment, nativeBasicData, world, | 638 : super(elementEnvironment, nativeBasicData, world, |
| 629 selectorConstraintsStrategy); | 639 selectorConstraintsStrategy); |
| 630 | 640 |
| 631 @override | 641 @override |
| 632 bool hasConstantFieldInitializer(FieldEntity field) { | 642 bool hasConstantFieldInitializer(FieldEntity field) { |
| 633 return _elementMap.hasConstantFieldInitializer(field); | 643 return _elementMap.hasConstantFieldInitializer(field); |
| 634 } | 644 } |
| 635 | 645 |
| 636 @override | 646 @override |
| 647 ConstantValue getConstantFieldInitializer(FieldEntity field) { |
| 648 return _elementMap.getConstantFieldInitializer(field); |
| 649 } |
| 650 |
| 651 @override |
| 637 void forEachParameter(FunctionEntity function, | 652 void forEachParameter(FunctionEntity function, |
| 638 void f(DartType type, String name, ConstantValue defaultValue)) { | 653 void f(DartType type, String name, ConstantValue defaultValue)) { |
| 639 _elementMap.forEachParameter(function, f); | 654 _elementMap.forEachParameter(function, f); |
| 640 } | 655 } |
| 641 | 656 |
| 642 @override | 657 @override |
| 643 void forEachInstanceField( | 658 void forEachInstanceField( |
| 644 ClassEntity cls, void f(ClassEntity declarer, FieldEntity field)) { | 659 ClassEntity cls, void f(ClassEntity declarer, FieldEntity field)) { |
| 645 _elementEnvironment.forEachClassMember(cls, | 660 _elementEnvironment.forEachClassMember(cls, |
| 646 (ClassEntity declarer, MemberEntity member) { | 661 (ClassEntity declarer, MemberEntity member) { |
| 647 if (member.isField && member.isInstanceMember) f(declarer, member); | 662 if (member.isField && member.isInstanceMember) f(declarer, member); |
| 648 }); | 663 }); |
| 649 } | 664 } |
| 650 } | 665 } |
| OLD | NEW |