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'; |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 InterfaceType type2 = instance2.type; | 617 InterfaceType type2 = instance2.type; |
618 return typeEquivalence(type1, type2) && | 618 return typeEquivalence(type1, type2) && |
619 instance1.kind == instance2.kind && | 619 instance1.kind == instance2.kind && |
620 instance1.isRedirection == instance2.isRedirection; | 620 instance1.isRedirection == instance2.isRedirection; |
621 } | 621 } |
622 | 622 |
623 bool areAbstractUsagesEquivalent(AbstractUsage usage1, AbstractUsage usage2) { | 623 bool areAbstractUsagesEquivalent(AbstractUsage usage1, AbstractUsage usage2) { |
624 return usage1.hasSameUsage(usage2); | 624 return usage1.hasSameUsage(usage2); |
625 } | 625 } |
626 | 626 |
| 627 bool _areEntitiesEquivalent(a, b) => areElementsEquivalent(a, b); |
| 628 |
627 void checkResolutionEnqueuers( | 629 void checkResolutionEnqueuers( |
628 BackendUsage backendUsage1, | 630 BackendUsage backendUsage1, |
629 BackendUsage backendUsage2, | 631 BackendUsage backendUsage2, |
630 ResolutionEnqueuer enqueuer1, | 632 ResolutionEnqueuer enqueuer1, |
631 ResolutionEnqueuer enqueuer2, | 633 ResolutionEnqueuer enqueuer2, |
632 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, | 634 {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, |
633 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | 635 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
634 bool elementFilter(Element element), | 636 bool elementFilter(Element element), |
635 bool verbose: false, | 637 bool verbose: false, |
636 bool skipClassUsageTesting: false}) { | 638 bool skipClassUsageTesting: false}) { |
637 elementFilter ??= (_) => true; | 639 elementFilter ??= (_) => true; |
638 | 640 |
639 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; | 641 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; |
640 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; | 642 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; |
641 | 643 |
642 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, | 644 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 "JavaScriptBackend.hasFunctionApplySupport mismatch"); | 715 "JavaScriptBackend.hasFunctionApplySupport mismatch"); |
714 Expect.equals( | 716 Expect.equals( |
715 backendUsage1.isRuntimeTypeUsed, | 717 backendUsage1.isRuntimeTypeUsed, |
716 backendUsage2.isRuntimeTypeUsed, | 718 backendUsage2.isRuntimeTypeUsed, |
717 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); | 719 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); |
718 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, | 720 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, |
719 "JavaScriptBackend.hasIsolateSupport mismatch"); | 721 "JavaScriptBackend.hasIsolateSupport mismatch"); |
720 } | 722 } |
721 | 723 |
722 void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2, | 724 void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2, |
723 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, | 725 {bool elementEquivalence(Entity a, Entity b): _areEntitiesEquivalent, |
724 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, | 726 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, |
725 bool elementFilter(Element element), | 727 bool elementFilter(Element element), |
726 bool verbose: false}) { | 728 bool verbose: false}) { |
727 CodegenWorldBuilderImpl worldBuilder1 = enqueuer1.worldBuilder; | 729 CodegenWorldBuilderImpl worldBuilder1 = enqueuer1.worldBuilder; |
728 CodegenWorldBuilderImpl worldBuilder2 = enqueuer2.worldBuilder; | 730 CodegenWorldBuilderImpl worldBuilder2 = enqueuer2.worldBuilder; |
729 | 731 |
730 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, | 732 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes, |
731 "Instantiated types mismatch", typeEquivalence, | 733 "Instantiated types mismatch", typeEquivalence, |
732 verbose: verbose); | 734 verbose: verbose); |
733 | 735 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 areAbstractUsagesEquivalent, | 789 areAbstractUsagesEquivalent, |
788 verbose: verbose); | 790 verbose: verbose); |
789 checkMaps( | 791 checkMaps( |
790 worldBuilder1.instanceMemberUsageForTesting, | 792 worldBuilder1.instanceMemberUsageForTesting, |
791 worldBuilder2.instanceMemberUsageForTesting, | 793 worldBuilder2.instanceMemberUsageForTesting, |
792 'instanceMemberUsageForTesting', | 794 'instanceMemberUsageForTesting', |
793 elementEquivalence, | 795 elementEquivalence, |
794 areAbstractUsagesEquivalent, | 796 areAbstractUsagesEquivalent, |
795 verbose: verbose); | 797 verbose: verbose); |
796 } | 798 } |
OLD | NEW |