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/enqueuer.dart'; |
19 import 'package:compiler/src/js_backend/native_data.dart'; | 19 import 'package:compiler/src/js_backend/native_data.dart'; |
20 import 'package:compiler/src/js_backend/interceptor_data.dart'; | 20 import 'package:compiler/src/js_backend/interceptor_data.dart'; |
21 import 'package:compiler/src/js_emitter/code_emitter_task.dart'; | |
22 import 'package:compiler/src/js_emitter/model.dart'; | |
21 import 'package:compiler/src/serialization/equivalence.dart'; | 23 import 'package:compiler/src/serialization/equivalence.dart'; |
22 import 'package:compiler/src/universe/class_set.dart'; | 24 import 'package:compiler/src/universe/class_set.dart'; |
23 import 'package:compiler/src/universe/world_builder.dart'; | 25 import 'package:compiler/src/universe/world_builder.dart'; |
24 import 'package:compiler/src/world.dart'; | 26 import 'package:compiler/src/world.dart'; |
25 import 'check_helpers.dart'; | 27 import 'check_helpers.dart'; |
26 | 28 |
27 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, | 29 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, |
28 {TestStrategy strategy: const TestStrategy(), | 30 {TestStrategy strategy: const TestStrategy(), |
29 bool allowExtra: false, | 31 bool allowExtra: false, |
30 bool verbose: false, | 32 bool verbose: false, |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
626 | 628 |
627 bool _areEntitiesEquivalent(a, b) => areElementsEquivalent(a, b); | 629 bool _areEntitiesEquivalent(a, b) => areElementsEquivalent(a, b); |
628 | 630 |
629 void checkResolutionEnqueuers( | 631 void checkResolutionEnqueuers( |
630 BackendUsage backendUsage1, | 632 BackendUsage backendUsage1, |
631 BackendUsage backendUsage2, | 633 BackendUsage backendUsage2, |
632 ResolutionEnqueuer enqueuer1, | 634 ResolutionEnqueuer enqueuer1, |
633 ResolutionEnqueuer enqueuer2, | 635 ResolutionEnqueuer enqueuer2, |
634 {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, | 636 {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, |
635 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | 637 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
636 bool elementFilter(Element element), | 638 bool elementFilter(Entity element), |
637 bool verbose: false, | 639 bool verbose: false, |
638 bool skipClassUsageTesting: false}) { | 640 bool skipClassUsageTesting: false}) { |
639 elementFilter ??= (_) => true; | 641 elementFilter ??= (_) => true; |
640 | 642 |
641 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; | 643 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; |
642 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; | 644 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; |
643 | 645 |
644 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, | 646 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, |
645 "Instantiated types mismatch", typeEquivalence, | 647 "Instantiated types mismatch", typeEquivalence, |
646 verbose: verbose); | 648 verbose: verbose); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
789 areAbstractUsagesEquivalent, | 791 areAbstractUsagesEquivalent, |
790 verbose: verbose); | 792 verbose: verbose); |
791 checkMaps( | 793 checkMaps( |
792 worldBuilder1.instanceMemberUsageForTesting, | 794 worldBuilder1.instanceMemberUsageForTesting, |
793 worldBuilder2.instanceMemberUsageForTesting, | 795 worldBuilder2.instanceMemberUsageForTesting, |
794 'instanceMemberUsageForTesting', | 796 'instanceMemberUsageForTesting', |
795 elementEquivalence, | 797 elementEquivalence, |
796 areAbstractUsagesEquivalent, | 798 areAbstractUsagesEquivalent, |
797 verbose: verbose); | 799 verbose: verbose); |
798 } | 800 } |
801 | |
802 // TODO(johnniwinther): Check all emitter properties. | |
803 void checkEmitters(CodeEmitterTask emitter1, CodeEmitterTask emitter2, | |
804 {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, | |
805 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | |
806 bool elementFilter(Element element), | |
807 bool verbose: false}) { | |
808 checkPrograms( | |
809 emitter1.emitter.programForTesting, emitter2.emitter.programForTesting); | |
810 | |
811 checkSets( | |
812 emitter1.typeTestRegistry.rtiNeededClasses, | |
813 emitter2.typeTestRegistry.rtiNeededClasses, | |
814 "TypeTestRegistry rti needed classes mismatch", | |
815 elementEquivalence, | |
816 verbose: verbose); | |
817 | |
818 checkSets( | |
819 emitter1.typeTestRegistry.checkedFunctionTypes, | |
820 emitter2.typeTestRegistry.checkedFunctionTypes, | |
821 "TypeTestRegistry checked function types mismatch", | |
822 typeEquivalence, | |
823 verbose: verbose); | |
824 | |
825 checkSets( | |
826 emitter1.typeTestRegistry.checkedClasses, | |
827 emitter2.typeTestRegistry.checkedClasses, | |
828 "TypeTestRegistry checked classes mismatch", | |
829 elementEquivalence, | |
830 verbose: verbose); | |
831 } | |
832 | |
833 // TODO(johnniwinther): Check all program properties. | |
834 void checkPrograms(Program program1, Program program2) { | |
835 checkLists(program1.fragments, program2.fragments, 'fragments', | |
836 (a, b) => a.outputFileName == b.outputFileName, | |
837 onSameElement: checkFragments); | |
838 } | |
839 | |
840 // TODO(johnniwinther): Check all fragment properties. | |
841 void checkFragments(Fragment fragment1, Fragment fragment2) { | |
842 checkLists(fragment1.libraries, fragment2.libraries, 'libraries', | |
843 (a, b) => a.element.canonicalUri == b.element.canonicalUri, | |
844 onSameElement: checkLibraries); | |
845 } | |
846 | |
847 // TODO(johnniwinther): Check all library properties. | |
848 void checkLibraries(Library library1, Library library2) { | |
Siggi Cherem (dart-lang)
2017/06/23 19:49:28
suggestion
- possibly rename to checkEmittedLibra
Johnni Winther
2017/06/26 09:17:44
Renamed functions to checkEmitter*
| |
849 checkLists(library1.classes, library2.classes, 'classes', | |
850 (a, b) => a.element.name == b.element.name, | |
851 onSameElement: checkClasses); | |
852 // TODO(johnniwinther): Check static method properties. | |
853 checkLists(library1.statics, library2.statics, 'statics', | |
854 (a, b) => a.name.key == b.name.key); | |
855 } | |
856 | |
857 // TODO(johnniwinther): Check all class properties. | |
858 void checkClasses(Class class1, Class class2) { | |
859 checkLists(class1.methods, class2.methods, 'methods', | |
860 (a, b) => a.name.key == b.name.key); | |
861 checkLists(class1.isChecks, class2.isChecks, 'isChecks', | |
862 (a, b) => a.name.key == b.name.key); | |
863 } | |
OLD | NEW |