| 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 // Partial test that the closed world computed from [WorldImpact]s derived from | 5 // Partial test that the closed world computed from [WorldImpact]s derived from |
| 6 // kernel is equivalent to the original computed from resolution. | 6 // kernel is equivalent to the original computed from resolution. |
| 7 library dart2js.kernel.closed_world2_test; | 7 library dart2js.kernel.closed_world2_test; |
| 8 | 8 |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:compiler/src/closure.dart'; | 10 import 'package:compiler/src/closure.dart'; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 import '../memory_compiler.dart'; | 43 import '../memory_compiler.dart'; |
| 44 import '../serialization/helper.dart'; | 44 import '../serialization/helper.dart'; |
| 45 import '../serialization/model_test_helper.dart'; | 45 import '../serialization/model_test_helper.dart'; |
| 46 import '../serialization/test_helper.dart'; | 46 import '../serialization/test_helper.dart'; |
| 47 | 47 |
| 48 import 'closed_world_test.dart'; | 48 import 'closed_world_test.dart'; |
| 49 import 'impact_test.dart'; | 49 import 'impact_test.dart'; |
| 50 | 50 |
| 51 const SOURCE = const { | 51 const SOURCE = const { |
| 52 'main.dart': ''' | 52 'main.dart': ''' |
| 53 main() {} | 53 main() { |
| 54 print('Hello World'); |
| 55 } |
| 54 ''' | 56 ''' |
| 55 }; | 57 }; |
| 56 | 58 |
| 57 main(List<String> args) { | 59 main(List<String> args) { |
| 58 Arguments arguments = new Arguments.from(args); | 60 Arguments arguments = new Arguments.from(args); |
| 59 Uri entryPoint; | 61 Uri entryPoint; |
| 60 Map<String, String> memorySourceFiles; | 62 Map<String, String> memorySourceFiles; |
| 61 if (arguments.uri != null) { | 63 if (arguments.uri != null) { |
| 62 entryPoint = arguments.uri; | 64 entryPoint = arguments.uri; |
| 63 memorySourceFiles = const <String, String>{}; | 65 memorySourceFiles = const <String, String>{}; |
| 64 } else { | 66 } else { |
| 65 entryPoint = Uri.parse('memory:main.dart'); | 67 entryPoint = Uri.parse('memory:main.dart'); |
| 66 memorySourceFiles = SOURCE; | 68 memorySourceFiles = SOURCE; |
| 67 } | 69 } |
| 68 | 70 |
| 69 asyncTest(() async { | 71 asyncTest(() async { |
| 70 enableDebugMode(); | 72 enableDebugMode(); |
| 71 | 73 |
| 72 print('---- analyze-only ------------------------------------------------'); | 74 print('---- analyze-only ------------------------------------------------'); |
| 73 Compiler compiler1 = compilerFor( | 75 Compiler compiler1 = compilerFor( |
| 74 entryPoint: entryPoint, | 76 entryPoint: entryPoint, |
| 75 memorySourceFiles: memorySourceFiles, | 77 memorySourceFiles: memorySourceFiles, |
| 76 options: [Flags.analyzeOnly, Flags.enableAssertMessage]); | 78 options: [Flags.analyzeOnly, Flags.enableAssertMessage]); |
| 77 ElementResolutionWorldBuilder.useInstantiationMap = true; | 79 ElementResolutionWorldBuilder.useInstantiationMap = true; |
| 78 compiler1.resolution.retainCachesForTesting = true; | 80 compiler1.resolution.retainCachesForTesting = true; |
| 79 await compiler1.run(entryPoint); | 81 await compiler1.run(entryPoint); |
| 80 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution; | 82 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution; |
| 81 BackendUsage backendUsage1 = compiler1.backend.backendUsage; | 83 BackendUsage backendUsage1 = compiler1.backend.backendUsage; |
| 82 compiler1.resolutionWorldBuilder.closeWorld(); | 84 ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld(); |
| 83 | 85 |
| 84 print('---- analyze-all -------------------------------------------------'); | 86 print('---- analyze-all -------------------------------------------------'); |
| 85 Compiler compiler = compilerFor( | 87 Compiler compiler = compilerFor( |
| 86 entryPoint: entryPoint, | 88 entryPoint: entryPoint, |
| 87 memorySourceFiles: memorySourceFiles, | 89 memorySourceFiles: memorySourceFiles, |
| 88 options: [ | 90 options: [ |
| 89 Flags.analyzeAll, | 91 Flags.analyzeAll, |
| 90 Flags.useKernel, | 92 Flags.useKernel, |
| 91 Flags.enableAssertMessage | 93 Flags.enableAssertMessage |
| 92 ]); | 94 ]); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 109 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; | 111 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; |
| 110 BackendUsageBuilder backendUsageBuilder2 = list[1]; | 112 BackendUsageBuilder backendUsageBuilder2 = list[1]; |
| 111 ImpactTransformer impactTransformer = list[2]; | 113 ImpactTransformer impactTransformer = list[2]; |
| 112 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer( | 114 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer( |
| 113 compiler.enqueuer, | 115 compiler.enqueuer, |
| 114 compiler.options, | 116 compiler.options, |
| 115 compiler.reporter, | 117 compiler.reporter, |
| 116 const TreeShakingEnqueuerStrategy(), | 118 const TreeShakingEnqueuerStrategy(), |
| 117 resolutionEnqueuerListener, | 119 resolutionEnqueuerListener, |
| 118 new KernelResolutionWorldBuilder( | 120 new KernelResolutionWorldBuilder( |
| 119 worldBuilder.elementEnvironment, | 121 worldBuilder, nativeBasicData, const OpenWorldStrategy()), |
| 120 worldBuilder.commonElements, | |
| 121 nativeBasicData, | |
| 122 const OpenWorldStrategy()), | |
| 123 new KernelWorkItemBuilder(worldBuilder, impactTransformer), | 122 new KernelWorkItemBuilder(worldBuilder, impactTransformer), |
| 124 'enqueuer from kelements'); | 123 'enqueuer from kelements'); |
| 125 computeClosedWorld( | 124 ClosedWorld closedWorld2 = computeClosedWorld( |
| 126 compiler.reporter, enqueuer2, worldBuilder.elementEnvironment); | 125 compiler.reporter, enqueuer2, worldBuilder.elementEnvironment); |
| 127 BackendUsage backendUsage2 = backendUsageBuilder2.close(); | 126 BackendUsage backendUsage2 = backendUsageBuilder2.close(); |
| 128 checkBackendUsage(backendUsage1, backendUsage2, equivalence); | 127 checkBackendUsage(backendUsage1, backendUsage2, equivalence); |
| 129 | 128 |
| 130 checkResolutionEnqueuers(backendUsage1, backendUsage2, enqueuer1, enqueuer2, | 129 checkResolutionEnqueuers(backendUsage1, backendUsage2, enqueuer1, enqueuer2, |
| 131 elementEquivalence: equivalence.entityEquivalence, | 130 elementEquivalence: equivalence.entityEquivalence, |
| 132 typeEquivalence: (ResolutionDartType a, DartType b) { | 131 typeEquivalence: (ResolutionDartType a, DartType b) { |
| 133 return equivalence.typeEquivalence(unalias(a), b); | 132 return equivalence.typeEquivalence(unalias(a), b); |
| 134 }, elementFilter: elementFilter, verbose: arguments.verbose); | 133 }, elementFilter: elementFilter, verbose: arguments.verbose); |
| 134 |
| 135 checkClosedWorlds(closedWorld1, closedWorld2, equivalence.entityEquivalence, |
| 136 verbose: arguments.verbose); |
| 135 }); | 137 }); |
| 136 } | 138 } |
| 137 | 139 |
| 138 List createKernelResolutionEnqueuerListener( | 140 List createKernelResolutionEnqueuerListener( |
| 139 CompilerOptions options, | 141 CompilerOptions options, |
| 140 DiagnosticReporter reporter, | 142 DiagnosticReporter reporter, |
| 141 DeferredLoadTask deferredLoadTask, | 143 DeferredLoadTask deferredLoadTask, |
| 142 KernelWorldBuilder worldBuilder, | 144 KernelWorldBuilder worldBuilder, |
| 143 NativeBasicData nativeBasicData) { | 145 NativeBasicData nativeBasicData) { |
| 144 ElementEnvironment elementEnvironment = worldBuilder.elementEnvironment; | 146 ElementEnvironment elementEnvironment = worldBuilder.elementEnvironment; |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 usage2.isInvokeOnUsed); | 366 usage2.isInvokeOnUsed); |
| 365 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, | 367 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, |
| 366 usage2.isRuntimeTypeUsed); | 368 usage2.isRuntimeTypeUsed); |
| 367 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, | 369 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, |
| 368 usage2.isIsolateInUse); | 370 usage2.isIsolateInUse); |
| 369 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, | 371 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, |
| 370 usage2.isFunctionApplyUsed); | 372 usage2.isFunctionApplyUsed); |
| 371 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, | 373 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, |
| 372 usage2.isNoSuchMethodUsed); | 374 usage2.isNoSuchMethodUsed); |
| 373 } | 375 } |
| OLD | NEW |