Chromium Code Reviews| 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 17 matching lines...) Expand all Loading... | |
| 28 import 'package:compiler/src/js_backend/native_data.dart'; | 28 import 'package:compiler/src/js_backend/native_data.dart'; |
| 29 import 'package:compiler/src/js_backend/impact_transformer.dart'; | 29 import 'package:compiler/src/js_backend/impact_transformer.dart'; |
| 30 import 'package:compiler/src/js_backend/interceptor_data.dart'; | 30 import 'package:compiler/src/js_backend/interceptor_data.dart'; |
| 31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; | 31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; |
| 32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; | 32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; |
| 33 import 'package:compiler/src/js_backend/mirrors_data.dart'; | 33 import 'package:compiler/src/js_backend/mirrors_data.dart'; |
| 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; | 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; |
| 35 import 'package:compiler/src/js_backend/resolution_listener.dart'; | 35 import 'package:compiler/src/js_backend/resolution_listener.dart'; |
| 36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; | 36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; |
| 37 import 'package:compiler/src/native/enqueue.dart'; | 37 import 'package:compiler/src/native/enqueue.dart'; |
| 38 import 'package:compiler/src/native/resolver.dart'; | |
| 38 import 'package:compiler/src/kernel/element_map.dart'; | 39 import 'package:compiler/src/kernel/element_map.dart'; |
| 39 import 'package:compiler/src/options.dart'; | 40 import 'package:compiler/src/options.dart'; |
| 40 import 'package:compiler/src/universe/world_builder.dart'; | 41 import 'package:compiler/src/universe/world_builder.dart'; |
| 41 import 'package:compiler/src/universe/world_impact.dart'; | 42 import 'package:compiler/src/universe/world_impact.dart'; |
| 42 import 'package:compiler/src/world.dart'; | 43 import 'package:compiler/src/world.dart'; |
| 44 import 'package:expect/expect.dart'; | |
| 43 import '../memory_compiler.dart'; | 45 import '../memory_compiler.dart'; |
| 44 import '../serialization/helper.dart'; | 46 import '../serialization/helper.dart'; |
| 45 import '../serialization/model_test_helper.dart'; | 47 import '../serialization/model_test_helper.dart'; |
| 46 import '../serialization/test_helper.dart'; | 48 import '../serialization/test_helper.dart'; |
| 47 | 49 |
| 48 import 'closed_world_test.dart'; | 50 import 'closed_world_test.dart'; |
| 49 import 'impact_test.dart'; | 51 import 'impact_test.dart'; |
| 50 | 52 |
| 51 const SOURCE = const { | 53 const SOURCE = const { |
| 52 'main.dart': ''' | 54 'main.dart': ''' |
| 55 import 'dart:html'; | |
| 56 | |
| 53 main() { | 57 main() { |
| 54 print('Hello World'); | 58 print('Hello World'); |
| 55 ''.contains; // Trigger member closurization. | 59 ''.contains; // Trigger member closurization. |
| 60 new Element.div(); | |
| 56 } | 61 } |
| 57 ''' | 62 ''' |
| 58 }; | 63 }; |
| 59 | 64 |
| 60 main(List<String> args) { | 65 main(List<String> args) { |
| 61 Arguments arguments = new Arguments.from(args); | 66 Arguments arguments = new Arguments.from(args); |
| 62 Uri entryPoint; | 67 Uri entryPoint; |
| 63 Map<String, String> memorySourceFiles; | 68 Map<String, String> memorySourceFiles; |
| 64 if (arguments.uri != null) { | 69 if (arguments.uri != null) { |
| 65 entryPoint = arguments.uri; | 70 entryPoint = arguments.uri; |
| 66 memorySourceFiles = const <String, String>{}; | 71 memorySourceFiles = const <String, String>{}; |
| 67 } else { | 72 } else { |
| 68 entryPoint = Uri.parse('memory:main.dart'); | 73 entryPoint = Uri.parse('memory:main.dart'); |
| 69 memorySourceFiles = SOURCE; | 74 memorySourceFiles = SOURCE; |
| 70 } | 75 } |
| 71 | 76 |
| 72 asyncTest(() async { | 77 asyncTest(() async { |
| 73 enableDebugMode(); | 78 enableDebugMode(); |
| 74 | 79 |
| 75 print('---- analyze-only ------------------------------------------------'); | 80 print('---- analyze-only ------------------------------------------------'); |
| 76 Compiler compiler1 = compilerFor( | 81 Compiler compiler1 = compilerFor( |
| 77 entryPoint: entryPoint, | 82 entryPoint: entryPoint, |
| 78 memorySourceFiles: memorySourceFiles, | 83 memorySourceFiles: memorySourceFiles, |
| 79 options: [Flags.analyzeOnly, Flags.enableAssertMessage]); | 84 options: [Flags.analyzeOnly, Flags.enableAssertMessage]); |
| 80 ElementResolutionWorldBuilder.useInstantiationMap = true; | 85 ElementResolutionWorldBuilder.useInstantiationMap = true; |
| 81 compiler1.resolution.retainCachesForTesting = true; | 86 compiler1.resolution.retainCachesForTesting = true; |
| 82 await compiler1.run(entryPoint); | 87 await compiler1.run(entryPoint); |
| 88 Expect.isFalse(compiler1.compilationFailed); | |
| 83 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution; | 89 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution; |
| 84 BackendUsage backendUsage1 = compiler1.backend.backendUsage; | 90 BackendUsage backendUsage1 = compiler1.backend.backendUsage; |
| 85 ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld(); | 91 ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld(); |
| 86 | 92 |
| 87 print('---- analyze-all -------------------------------------------------'); | 93 print('---- analyze-all -------------------------------------------------'); |
| 88 Compiler compiler = compilerFor( | 94 Compiler compiler = compilerFor( |
| 89 entryPoint: entryPoint, | 95 entryPoint: entryPoint, |
| 90 memorySourceFiles: memorySourceFiles, | 96 memorySourceFiles: memorySourceFiles, |
| 91 options: [ | 97 options: [ |
| 92 Flags.analyzeAll, | 98 Flags.analyzeAll, |
| 93 Flags.useKernel, | 99 Flags.useKernel, |
| 94 Flags.enableAssertMessage | 100 Flags.enableAssertMessage |
| 95 ]); | 101 ]); |
| 96 await compiler.run(entryPoint); | 102 await compiler.run(entryPoint); |
| 97 compiler.resolutionWorldBuilder.closeWorld(); | 103 compiler.resolutionWorldBuilder.closeWorld(); |
| 98 | 104 |
| 99 print('---- closed world from kernel ------------------------------------'); | 105 print('---- closed world from kernel ------------------------------------'); |
| 100 KernelToElementMap elementMap = new KernelToElementMap(compiler.reporter); | 106 KernelToElementMap elementMap = new KernelToElementMap(compiler.reporter); |
| 101 elementMap.addProgram(compiler.backend.kernelTask.program); | 107 elementMap.addProgram(compiler.backend.kernelTask.program); |
| 102 KernelEquivalence equivalence = new KernelEquivalence(elementMap); | 108 KernelEquivalence equivalence = new KernelEquivalence(elementMap); |
| 103 NativeBasicData nativeBasicData = computeNativeBasicData(elementMap); | 109 NativeBasicData nativeBasicData = computeNativeBasicData(elementMap); |
| 104 checkNativeBasicData( | 110 checkNativeBasicData( |
| 105 compiler.backend.nativeBasicData, nativeBasicData, equivalence); | 111 compiler1.backend.nativeBasicData, nativeBasicData, equivalence); |
| 106 List list = createKernelResolutionEnqueuerListener( | 112 List list = createKernelResolutionEnqueuerListener( |
| 107 compiler.options, | 113 compiler.options, |
| 108 compiler.reporter, | 114 compiler.reporter, |
| 109 compiler.deferredLoadTask, | 115 compiler.deferredLoadTask, |
| 110 elementMap, | 116 elementMap, |
| 111 nativeBasicData); | 117 nativeBasicData); |
| 112 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; | 118 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; |
| 113 BackendUsageBuilder backendUsageBuilder2 = list[1]; | 119 BackendUsageBuilder backendUsageBuilder2 = list[1]; |
| 114 ImpactTransformer impactTransformer = list[2]; | 120 ImpactTransformer impactTransformer = list[2]; |
| 121 | |
| 115 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer( | 122 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer( |
| 116 compiler.enqueuer, | 123 compiler.enqueuer, |
| 117 compiler.options, | 124 compiler.options, |
| 118 compiler.reporter, | 125 compiler.reporter, |
| 119 const TreeShakingEnqueuerStrategy(), | 126 const TreeShakingEnqueuerStrategy(), |
| 120 resolutionEnqueuerListener, | 127 resolutionEnqueuerListener, |
| 121 new KernelResolutionWorldBuilder( | 128 new KernelResolutionWorldBuilder( |
| 122 elementMap, nativeBasicData, const OpenWorldStrategy()), | 129 elementMap, nativeBasicData, const OpenWorldStrategy()), |
| 123 new KernelWorkItemBuilder(elementMap, impactTransformer), | 130 new KernelWorkItemBuilder(elementMap, impactTransformer), |
| 124 'enqueuer from kelements'); | 131 'enqueuer from kelements'); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = | 165 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = |
| 159 new LookupMapResolutionAnalysis(reporter, elementEnvironment); | 166 new LookupMapResolutionAnalysis(reporter, elementEnvironment); |
| 160 | 167 |
| 161 InterceptorDataBuilder interceptorDataBuilder = | 168 InterceptorDataBuilder interceptorDataBuilder = |
| 162 new InterceptorDataBuilderImpl( | 169 new InterceptorDataBuilderImpl( |
| 163 nativeBasicData, elementEnvironment, commonElements); | 170 nativeBasicData, elementEnvironment, commonElements); |
| 164 BackendUsageBuilder backendUsageBuilder = | 171 BackendUsageBuilder backendUsageBuilder = |
| 165 new BackendUsageBuilderImpl(commonElements); | 172 new BackendUsageBuilderImpl(commonElements); |
| 166 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( | 173 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( |
| 167 commonElements, new KernelNoSuchMethodResolver(elementMap)); | 174 commonElements, new KernelNoSuchMethodResolver(elementMap)); |
| 175 NativeClassResolver nativeClassResolver = new NativeClassResolverImpl( | |
|
Siggi Cherem (dart-lang)
2017/04/25 19:45:53
should we start using the strategy here?
Johnni Winther
2017/04/26 07:40:19
Yes.
| |
| 176 elementEnvironment, commonElements, nativeBasicData); | |
| 168 NativeResolutionEnqueuer nativeResolutionEnqueuer = | 177 NativeResolutionEnqueuer nativeResolutionEnqueuer = |
| 169 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements, | 178 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements, |
| 170 backendUsageBuilder, new KernelNativeClassResolver(elementMap)); | 179 backendUsageBuilder, nativeClassResolver); |
| 171 | 180 |
| 172 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( | 181 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( |
| 173 options, | 182 options, |
| 174 elementEnvironment, | 183 elementEnvironment, |
| 175 commonElements, | 184 commonElements, |
| 176 impacts, | 185 impacts, |
| 177 nativeBasicData, | 186 nativeBasicData, |
| 178 interceptorDataBuilder, | 187 interceptorDataBuilder, |
| 179 backendUsageBuilder, | 188 backendUsageBuilder, |
| 180 rtiNeedBuilder, | 189 rtiNeedBuilder, |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 usage2.isInvokeOnUsed); | 390 usage2.isInvokeOnUsed); |
| 382 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, | 391 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, |
| 383 usage2.isRuntimeTypeUsed); | 392 usage2.isRuntimeTypeUsed); |
| 384 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, | 393 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, |
| 385 usage2.isIsolateInUse); | 394 usage2.isIsolateInUse); |
| 386 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, | 395 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, |
| 387 usage2.isFunctionApplyUsed); | 396 usage2.isFunctionApplyUsed); |
| 388 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, | 397 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, |
| 389 usage2.isNoSuchMethodUsed); | 398 usage2.isNoSuchMethodUsed); |
| 390 } | 399 } |
| OLD | NEW |