| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 library dart2js.kernel.impact_test; | 5 library dart2js.kernel.impact_test; |
| 6 | 6 |
| 7 import 'package:async_helper/async_helper.dart'; | 7 import 'package:async_helper/async_helper.dart'; |
| 8 import 'package:compiler/src/commandline_options.dart'; | 8 import 'package:compiler/src/commandline_options.dart'; |
| 9 import 'package:compiler/src/common.dart'; | 9 import 'package:compiler/src/common.dart'; |
| 10 import 'package:compiler/src/common/names.dart'; | 10 import 'package:compiler/src/common/names.dart'; |
| 11 import 'package:compiler/src/common/resolution.dart'; | 11 import 'package:compiler/src/common/resolution.dart'; |
| 12 import 'package:compiler/src/compiler.dart'; | 12 import 'package:compiler/src/compiler.dart'; |
| 13 import 'package:compiler/src/constants/expressions.dart'; | 13 import 'package:compiler/src/constants/expressions.dart'; |
| 14 import 'package:compiler/src/elements/elements.dart'; | 14 import 'package:compiler/src/elements/elements.dart'; |
| 15 import 'package:compiler/src/elements/resolution_types.dart'; | 15 import 'package:compiler/src/elements/resolution_types.dart'; |
| 16 import 'package:compiler/src/js_backend/backend.dart'; | 16 import 'package:compiler/src/js_backend/backend.dart'; |
| 17 import 'package:compiler/src/kernel/element_adapter.dart'; | |
| 18 import 'package:compiler/src/kernel/element_map.dart'; | 17 import 'package:compiler/src/kernel/element_map.dart'; |
| 18 import 'package:compiler/src/kernel/element_map_impl.dart'; |
| 19 import 'package:compiler/src/resolution/registry.dart'; | 19 import 'package:compiler/src/resolution/registry.dart'; |
| 20 import 'package:compiler/src/resolution/tree_elements.dart'; | 20 import 'package:compiler/src/resolution/tree_elements.dart'; |
| 21 import 'package:compiler/src/ssa/kernel_impact.dart'; | 21 import 'package:compiler/src/ssa/kernel_impact.dart'; |
| 22 import 'package:compiler/src/serialization/equivalence.dart'; | 22 import 'package:compiler/src/serialization/equivalence.dart'; |
| 23 import 'package:compiler/src/universe/call_structure.dart'; | 23 import 'package:compiler/src/universe/call_structure.dart'; |
| 24 import 'package:compiler/src/universe/feature.dart'; | 24 import 'package:compiler/src/universe/feature.dart'; |
| 25 import 'package:compiler/src/universe/use.dart'; | 25 import 'package:compiler/src/universe/use.dart'; |
| 26 import 'package:expect/expect.dart'; | 26 import 'package:expect/expect.dart'; |
| 27 import 'package:kernel/ast.dart' as ir; | 27 import 'package:kernel/ast.dart' as ir; |
| 28 import '../memory_compiler.dart'; | 28 import '../memory_compiler.dart'; |
| (...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 entryPoint: entryPoint, | 733 entryPoint: entryPoint, |
| 734 memorySourceFiles: SOURCE, | 734 memorySourceFiles: SOURCE, |
| 735 options: [ | 735 options: [ |
| 736 fullTest ? Flags.analyzeAll : Flags.analyzeOnly, | 736 fullTest ? Flags.analyzeAll : Flags.analyzeOnly, |
| 737 Flags.useKernel, | 737 Flags.useKernel, |
| 738 Flags.enableAssertMessage | 738 Flags.enableAssertMessage |
| 739 ]); | 739 ]); |
| 740 compiler.resolution.retainCachesForTesting = true; | 740 compiler.resolution.retainCachesForTesting = true; |
| 741 Expect.isTrue(await compiler.run(entryPoint)); | 741 Expect.isTrue(await compiler.run(entryPoint)); |
| 742 JavaScriptBackend backend = compiler.backend; | 742 JavaScriptBackend backend = compiler.backend; |
| 743 KernelToElementMap kernelElementMap = | 743 KernelToElementMapImpl kernelElementMap = |
| 744 new KernelToElementMap(compiler.reporter, compiler.environment); | 744 new KernelToElementMapImpl(compiler.reporter, compiler.environment); |
| 745 kernelElementMap.addProgram(backend.kernelTask.program); | 745 kernelElementMap.addProgram(backend.kernelTask.program); |
| 746 | 746 |
| 747 checkLibrary(compiler, kernelElementMap, compiler.mainApp, | 747 checkLibrary(compiler, kernelElementMap, compiler.mainApp, |
| 748 fullTest: fullTest); | 748 fullTest: fullTest); |
| 749 compiler.libraryLoader.libraries.forEach((LibraryElement library) { | 749 compiler.libraryLoader.libraries.forEach((LibraryElement library) { |
| 750 if (library == compiler.mainApp) return; | 750 if (library == compiler.mainApp) return; |
| 751 checkLibrary(compiler, kernelElementMap, library, fullTest: fullTest); | 751 checkLibrary(compiler, kernelElementMap, library, fullTest: fullTest); |
| 752 }); | 752 }); |
| 753 }); | 753 }); |
| 754 } | 754 } |
| 755 | 755 |
| 756 void checkLibrary(Compiler compiler, KernelElementAdapter kernelElementAdapter, | 756 void checkLibrary(Compiler compiler, KernelToElementMapMixin elementMap, |
| 757 LibraryElement library, | 757 LibraryElement library, |
| 758 {bool fullTest: false}) { | 758 {bool fullTest: false}) { |
| 759 library.forEachLocalMember((AstElement element) { | 759 library.forEachLocalMember((AstElement element) { |
| 760 if (element.isClass) { | 760 if (element.isClass) { |
| 761 ClassElement cls = element; | 761 ClassElement cls = element; |
| 762 cls.forEachLocalMember((AstElement member) { | 762 cls.forEachLocalMember((AstElement member) { |
| 763 checkElement(compiler, kernelElementAdapter, member, | 763 checkElement(compiler, elementMap, member, fullTest: fullTest); |
| 764 fullTest: fullTest); | |
| 765 }); | 764 }); |
| 766 } else if (element.isTypedef) { | 765 } else if (element.isTypedef) { |
| 767 // Skip typedefs. | 766 // Skip typedefs. |
| 768 } else { | 767 } else { |
| 769 checkElement(compiler, kernelElementAdapter, element, fullTest: fullTest); | 768 checkElement(compiler, elementMap, element, fullTest: fullTest); |
| 770 } | 769 } |
| 771 }); | 770 }); |
| 772 } | 771 } |
| 773 | 772 |
| 774 void checkElement(Compiler compiler, KernelElementAdapter kernelElementAdapter, | 773 void checkElement( |
| 775 AstElement element, | 774 Compiler compiler, KernelToElementMapMixin elementMap, AstElement element, |
| 776 {bool fullTest: false}) { | 775 {bool fullTest: false}) { |
| 777 if (!fullTest && element.library.isPlatformLibrary) { | 776 if (!fullTest && element.library.isPlatformLibrary) { |
| 778 return; | 777 return; |
| 779 } | 778 } |
| 780 if (element.isConstructor) { | 779 if (element.isConstructor) { |
| 781 ConstructorElement constructor = element; | 780 ConstructorElement constructor = element; |
| 782 if (constructor.isRedirectingFactory) { | 781 if (constructor.isRedirectingFactory) { |
| 783 // Skip redirecting constructors for now; they might not be supported. | 782 // Skip redirecting constructors for now; they might not be supported. |
| 784 return; | 783 return; |
| 785 } | 784 } |
| 786 } | 785 } |
| 787 if (!fullTest && !compiler.resolution.hasResolutionImpact(element)) { | 786 if (!fullTest && !compiler.resolution.hasResolutionImpact(element)) { |
| 788 return; | 787 return; |
| 789 } | 788 } |
| 790 compiler.reporter.withCurrentElement(element.implementation, () { | 789 compiler.reporter.withCurrentElement(element.implementation, () { |
| 791 ResolutionImpact astImpact = | 790 ResolutionImpact astImpact = |
| 792 compiler.resolution.getResolutionImpact(element); | 791 compiler.resolution.getResolutionImpact(element); |
| 793 astImpact = laxImpact(compiler, element, astImpact); | 792 astImpact = laxImpact(compiler, element, astImpact); |
| 794 ResolutionImpact kernelImpact1 = build(compiler, element.resolvedAst); | 793 ResolutionImpact kernelImpact1 = build(compiler, element.resolvedAst); |
| 795 ir.Member member = getIrMember(compiler, element.resolvedAst); | 794 ir.Member member = getIrMember(compiler, element.resolvedAst); |
| 796 Expect.isNotNull(kernelImpact1, 'No impact computed for $element'); | 795 Expect.isNotNull(kernelImpact1, 'No impact computed for $element'); |
| 797 ResolutionImpact kernelImpact2 = | 796 ResolutionImpact kernelImpact2 = buildKernelImpact(member, elementMap); |
| 798 buildKernelImpact(member, kernelElementAdapter); | |
| 799 Expect.isNotNull(kernelImpact2, 'No impact computed for $member'); | 797 Expect.isNotNull(kernelImpact2, 'No impact computed for $member'); |
| 800 testResolutionImpactEquivalence(astImpact, kernelImpact1, | 798 testResolutionImpactEquivalence(astImpact, kernelImpact1, |
| 801 strategy: const CheckStrategy()); | 799 strategy: const CheckStrategy()); |
| 802 KernelEquivalence equivalence = new KernelEquivalence(kernelElementAdapter); | 800 KernelEquivalence equivalence = new KernelEquivalence(elementMap); |
| 803 testResolutionImpactEquivalence(astImpact, kernelImpact2, | 801 testResolutionImpactEquivalence(astImpact, kernelImpact2, |
| 804 strategy: new CheckStrategy( | 802 strategy: new CheckStrategy( |
| 805 elementEquivalence: equivalence.entityEquivalence, | 803 elementEquivalence: equivalence.entityEquivalence, |
| 806 typeEquivalence: equivalence.typeEquivalence)); | 804 typeEquivalence: equivalence.typeEquivalence)); |
| 807 }); | 805 }); |
| 808 } | 806 } |
| 809 | 807 |
| 810 /// Lax the precision of [impact] to meet expectancy of the corresponding impact | 808 /// Lax the precision of [impact] to meet expectancy of the corresponding impact |
| 811 /// generated from kernel. | 809 /// generated from kernel. |
| 812 ResolutionImpact laxImpact( | 810 ResolutionImpact laxImpact( |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 938 visitList(type.optionalParameterTypes), | 936 visitList(type.optionalParameterTypes), |
| 939 type.namedParameters, | 937 type.namedParameters, |
| 940 visitList(type.namedParameterTypes)); | 938 visitList(type.namedParameterTypes)); |
| 941 } | 939 } |
| 942 } | 940 } |
| 943 | 941 |
| 944 /// Perform unaliasing of all typedefs nested within a [ResolutionDartType]. | 942 /// Perform unaliasing of all typedefs nested within a [ResolutionDartType]. |
| 945 ResolutionDartType unalias(ResolutionDartType type) { | 943 ResolutionDartType unalias(ResolutionDartType type) { |
| 946 return const Unaliaser().visit(type); | 944 return const Unaliaser().visit(type); |
| 947 } | 945 } |
| OLD | NEW |