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 /// Equivalence test functions for data objects. | 5 /// Equivalence test functions for data objects. |
| 6 | 6 |
| 7 library dart2js.equivalence.functions; | 7 library dart2js.equivalence.functions; |
| 8 | 8 |
| 9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
| 10 import 'package:compiler/src/common/resolution.dart'; | 10 import 'package:compiler/src/common/resolution.dart'; |
| 11 import 'package:compiler/src/common_elements.dart'; | 11 import 'package:compiler/src/common_elements.dart'; |
| 12 import 'package:compiler/src/compiler.dart'; | 12 import 'package:compiler/src/compiler.dart'; |
| 13 import 'package:compiler/src/elements/types.dart'; | 13 import 'package:compiler/src/elements/types.dart'; |
| 14 import 'package:compiler/src/elements/elements.dart'; | 14 import 'package:compiler/src/elements/elements.dart'; |
| 15 import 'package:compiler/src/elements/entities.dart'; | 15 import 'package:compiler/src/elements/entities.dart'; |
| 16 import 'package:compiler/src/enqueue.dart'; | 16 import 'package:compiler/src/enqueue.dart'; |
| 17 import 'package:compiler/src/js_backend/backend_usage.dart'; | 17 import 'package:compiler/src/js_backend/backend_usage.dart'; |
| 18 import 'package:compiler/src/js_backend/enqueuer.dart'; | |
| 18 import 'package:compiler/src/js_backend/native_data.dart'; | 19 import 'package:compiler/src/js_backend/native_data.dart'; |
| 19 import 'package:compiler/src/js_backend/interceptor_data.dart'; | 20 import 'package:compiler/src/js_backend/interceptor_data.dart'; |
| 20 import 'package:compiler/src/serialization/equivalence.dart'; | 21 import 'package:compiler/src/serialization/equivalence.dart'; |
| 21 import 'package:compiler/src/universe/class_set.dart'; | 22 import 'package:compiler/src/universe/class_set.dart'; |
| 22 import 'package:compiler/src/universe/world_builder.dart'; | 23 import 'package:compiler/src/universe/world_builder.dart'; |
| 23 import 'package:compiler/src/world.dart'; | 24 import 'package:compiler/src/world.dart'; |
| 24 import 'check_helpers.dart'; | 25 import 'check_helpers.dart'; |
| 25 | 26 |
| 26 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, | 27 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, |
| 27 {TestStrategy strategy: const TestStrategy(), | 28 {TestStrategy strategy: const TestStrategy(), |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 620 BackendUsage backendUsage2, | 621 BackendUsage backendUsage2, |
| 621 ResolutionEnqueuer enqueuer1, | 622 ResolutionEnqueuer enqueuer1, |
| 622 ResolutionEnqueuer enqueuer2, | 623 ResolutionEnqueuer enqueuer2, |
| 623 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, | 624 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, |
| 624 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | 625 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
| 625 bool elementFilter(Element element), | 626 bool elementFilter(Element element), |
| 626 bool verbose: false}) { | 627 bool verbose: false}) { |
| 627 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; | 628 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; |
| 628 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; | 629 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; |
| 629 | 630 |
| 630 checkSets( | 631 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, |
| 631 enqueuer1.worldBuilder.instantiatedTypes, | 632 "Instantiated types mismatch", typeEquivalence, |
| 632 enqueuer2.worldBuilder.instantiatedTypes, | |
| 633 "Instantiated types mismatch", | |
| 634 typeEquivalence, | |
| 635 verbose: verbose); | 633 verbose: verbose); |
| 636 | 634 |
| 637 checkSets( | 635 checkSets( |
| 638 enqueuer1.worldBuilder.directlyInstantiatedClasses, | 636 worldBuilder1.directlyInstantiatedClasses, |
| 639 enqueuer2.worldBuilder.directlyInstantiatedClasses, | 637 worldBuilder2.directlyInstantiatedClasses, |
| 640 "Directly instantiated classes mismatch", | 638 "Directly instantiated classes mismatch", |
| 641 elementEquivalence, | 639 elementEquivalence, |
| 642 verbose: verbose); | 640 verbose: verbose); |
| 643 | 641 |
| 644 checkMaps( | 642 checkMaps( |
| 645 worldBuilder1.getInstantiationMap(), | 643 worldBuilder1.getInstantiationMap(), |
| 646 worldBuilder2.getInstantiationMap(), | 644 worldBuilder2.getInstantiationMap(), |
| 647 "Instantiated classes mismatch", | 645 "Instantiated classes mismatch", |
| 648 elementEquivalence, | 646 elementEquivalence, |
| 649 (a, b) => areInstantiationInfosEquivalent( | 647 (a, b) => areInstantiationInfosEquivalent( |
| 650 a, b, elementEquivalence, typeEquivalence), | 648 a, b, elementEquivalence, typeEquivalence), |
| 651 verbose: verbose); | 649 verbose: verbose); |
| 652 | 650 |
| 653 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, | 651 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, |
| 654 "Processed element mismatch", elementEquivalence, elementFilter: (e) { | 652 "Processed element mismatch", elementEquivalence, elementFilter: (e) { |
| 655 return elementFilter != null ? elementFilter(e) : true; | 653 return elementFilter != null ? elementFilter(e) : true; |
| 656 }, verbose: verbose); | 654 }, verbose: verbose); |
| 657 | 655 |
| 658 checkSets(enqueuer1.worldBuilder.isChecks, enqueuer2.worldBuilder.isChecks, | 656 checkSets(worldBuilder1.isChecks, worldBuilder2.isChecks, "Is-check mismatch", |
| 659 "Is-check mismatch", typeEquivalence, | 657 typeEquivalence, |
| 658 verbose: verbose); | |
| 659 | |
| 660 checkSets(worldBuilder1.closurizedMembers, worldBuilder2.closurizedMembers, | |
| 661 "closurizedMembers", elementEquivalence, | |
| 662 verbose: verbose); | |
| 663 checkSets(worldBuilder1.fieldSetters, worldBuilder2.fieldSetters, | |
| 664 "fieldSetters", elementEquivalence, | |
| 665 verbose: verbose); | |
| 666 checkSets( | |
| 667 worldBuilder1.methodsNeedingSuperGetter, | |
| 668 worldBuilder2.methodsNeedingSuperGetter, | |
| 669 "methodsNeedingSuperGetter", | |
| 670 elementEquivalence, | |
| 671 verbose: verbose); | |
| 672 | |
| 673 checkMaps( | |
| 674 worldBuilder1.classUsageForTesting, | |
| 675 worldBuilder1.classUsageForTesting, | |
|
Siggi Cherem (dart-lang)
2017/05/30 22:41:15
worldBuilder2
Johnni Winther
2017/05/31 10:46:38
You sure? ;)
| |
| 676 'classUsageForTesting', | |
| 677 elementEquivalence, | |
| 678 equality, | |
| 679 verbose: verbose); | |
| 680 checkMaps( | |
| 681 worldBuilder1.staticMemberUsageForTesting, | |
| 682 worldBuilder1.staticMemberUsageForTesting, | |
|
Siggi Cherem (dart-lang)
2017/05/30 22:41:15
2
Johnni Winther
2017/05/31 10:46:38
Done.
| |
| 683 'staticMemberUsageForTesting', | |
| 684 elementEquivalence, | |
| 685 equality, | |
| 686 verbose: verbose); | |
| 687 checkMaps( | |
| 688 worldBuilder1.instanceMemberUsageForTesting, | |
| 689 worldBuilder1.instanceMemberUsageForTesting, | |
|
Siggi Cherem (dart-lang)
2017/05/30 22:41:15
2
Johnni Winther
2017/05/31 10:46:38
Done.
| |
| 690 'instanceMemberUsageForTesting', | |
| 691 elementEquivalence, | |
| 692 equality, | |
| 660 verbose: verbose); | 693 verbose: verbose); |
| 661 | 694 |
| 662 Expect.equals(backendUsage1.isInvokeOnUsed, backendUsage2.isInvokeOnUsed, | 695 Expect.equals(backendUsage1.isInvokeOnUsed, backendUsage2.isInvokeOnUsed, |
| 663 "JavaScriptBackend.hasInvokeOnSupport mismatch"); | 696 "JavaScriptBackend.hasInvokeOnSupport mismatch"); |
| 664 Expect.equals( | 697 Expect.equals( |
| 665 backendUsage1.isFunctionApplyUsed, | 698 backendUsage1.isFunctionApplyUsed, |
| 666 backendUsage1.isFunctionApplyUsed, | 699 backendUsage1.isFunctionApplyUsed, |
| 667 "JavaScriptBackend.hasFunctionApplySupport mismatch"); | 700 "JavaScriptBackend.hasFunctionApplySupport mismatch"); |
| 668 Expect.equals( | 701 Expect.equals( |
| 669 backendUsage1.isRuntimeTypeUsed, | 702 backendUsage1.isRuntimeTypeUsed, |
| 670 backendUsage2.isRuntimeTypeUsed, | 703 backendUsage2.isRuntimeTypeUsed, |
| 671 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); | 704 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); |
| 672 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, | 705 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, |
| 673 "JavaScriptBackend.hasIsolateSupport mismatch"); | 706 "JavaScriptBackend.hasIsolateSupport mismatch"); |
| 674 } | 707 } |
| 708 | |
| 709 void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2, | |
| 710 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, | |
| 711 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | |
| 712 bool elementFilter(Element element), | |
| 713 bool verbose: false}) { | |
| 714 CodegenWorldBuilderImpl worldBuilder1 = enqueuer1.worldBuilder; | |
| 715 CodegenWorldBuilderImpl worldBuilder2 = enqueuer2.worldBuilder; | |
| 716 | |
| 717 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, | |
| 718 "Instantiated types mismatch", typeEquivalence, | |
| 719 verbose: verbose); | |
| 720 | |
| 721 checkSets( | |
| 722 worldBuilder1.directlyInstantiatedClasses, | |
| 723 worldBuilder2.directlyInstantiatedClasses, | |
| 724 "Directly instantiated classes mismatch", | |
| 725 elementEquivalence, | |
| 726 verbose: verbose); | |
| 727 | |
| 728 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, | |
| 729 "Processed element mismatch", elementEquivalence, elementFilter: (e) { | |
| 730 return elementFilter != null ? elementFilter(e) : true; | |
| 731 }, verbose: verbose); | |
| 732 | |
| 733 checkSets(worldBuilder1.isChecks, worldBuilder2.isChecks, "Is-check mismatch", | |
| 734 typeEquivalence, | |
| 735 verbose: verbose); | |
| 736 | |
| 737 checkSets( | |
| 738 worldBuilder1.allReferencedStaticFields, | |
| 739 worldBuilder2.allReferencedStaticFields, | |
| 740 "Directly instantiated classes mismatch", | |
| 741 elementEquivalence, | |
| 742 verbose: verbose); | |
| 743 checkSets(worldBuilder1.closurizedMembers, worldBuilder2.closurizedMembers, | |
| 744 "closurizedMembers", elementEquivalence, | |
| 745 verbose: verbose); | |
| 746 checkSets(worldBuilder1.processedClasses, worldBuilder2.processedClasses, | |
| 747 "processedClasses", elementEquivalence, | |
| 748 verbose: verbose); | |
| 749 checkSets( | |
| 750 worldBuilder1.methodsNeedingSuperGetter, | |
| 751 worldBuilder2.methodsNeedingSuperGetter, | |
| 752 "methodsNeedingSuperGetter", | |
| 753 elementEquivalence, | |
| 754 verbose: verbose); | |
| 755 checkSets( | |
| 756 worldBuilder1.staticFunctionsNeedingGetter, | |
| 757 worldBuilder2.staticFunctionsNeedingGetter, | |
| 758 "staticFunctionsNeedingGetter", | |
| 759 elementEquivalence, | |
| 760 verbose: verbose); | |
| 761 | |
| 762 checkMaps( | |
| 763 worldBuilder1.classUsageForTesting, | |
| 764 worldBuilder1.classUsageForTesting, | |
|
Siggi Cherem (dart-lang)
2017/05/30 22:41:14
also here and the two other checks below
Johnni Winther
2017/05/31 10:46:38
Done.
| |
| 765 'classUsageForTesting', | |
| 766 elementEquivalence, | |
| 767 equality, | |
| 768 verbose: verbose); | |
| 769 checkMaps( | |
| 770 worldBuilder1.staticMemberUsageForTesting, | |
| 771 worldBuilder1.staticMemberUsageForTesting, | |
| 772 'staticMemberUsageForTesting', | |
| 773 elementEquivalence, | |
| 774 equality, | |
| 775 verbose: verbose); | |
| 776 checkMaps( | |
| 777 worldBuilder1.instanceMemberUsageForTesting, | |
| 778 worldBuilder1.instanceMemberUsageForTesting, | |
| 779 'instanceMemberUsageForTesting', | |
| 780 elementEquivalence, | |
| 781 equality, | |
| 782 verbose: verbose); | |
| 783 } | |
| OLD | NEW |