Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: tests/compiler/dart2js/equivalence/check_functions.dart

Issue 2954493002: Less inequivalence on Hello World! (Closed)
Patch Set: Fix Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698