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 // Tests that the closed world computed from [WorldImpact]s derived from kernel | 5 // Tests that the closed world computed from [WorldImpact]s derived from kernel |
6 // is equivalent to the original computed from resolution. | 6 // is equivalent to the original computed from resolution. |
7 library dart2js.kernel.closed_world_test; | 7 library dart2js.kernel.closed_world_test; |
8 | 8 |
9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
10 import 'package:compiler/src/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 enableDebugMode(); | 69 enableDebugMode(); |
70 Compiler compiler = compilerFor( | 70 Compiler compiler = compilerFor( |
71 entryPoint: entryPoint, | 71 entryPoint: entryPoint, |
72 memorySourceFiles: memorySourceFiles, | 72 memorySourceFiles: memorySourceFiles, |
73 options: [ | 73 options: [ |
74 Flags.analyzeOnly, | 74 Flags.analyzeOnly, |
75 Flags.useKernel, | 75 Flags.useKernel, |
76 Flags.enableAssertMessage | 76 Flags.enableAssertMessage |
77 ]); | 77 ]); |
78 ResolutionWorldBuilderImpl worldBuilder = | 78 ResolutionWorldBuilderImpl worldBuilder = |
79 compiler.enqueuer.resolution.universe; | 79 compiler.enqueuer.resolution.worldBuilder; |
80 worldBuilder.useInstantiationMap = true; | 80 worldBuilder.useInstantiationMap = true; |
81 compiler.resolution.retainCachesForTesting = true; | 81 compiler.resolution.retainCachesForTesting = true; |
82 await compiler.run(entryPoint); | 82 await compiler.run(entryPoint); |
83 compiler.resolverWorld.closeWorld(compiler.reporter); | 83 compiler.resolutionWorldBuilder.closeWorld(compiler.reporter); |
84 | 84 |
85 JavaScriptBackend backend = compiler.backend; | 85 JavaScriptBackend backend = compiler.backend; |
86 // Create a new resolution enqueuer and feed it with the [WorldImpact]s | 86 // Create a new resolution enqueuer and feed it with the [WorldImpact]s |
87 // computed from kernel through the [build] in `kernel_impact.dart`. | 87 // computed from kernel through the [build] in `kernel_impact.dart`. |
88 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( | 88 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( |
89 compiler.enqueuer, | 89 compiler.enqueuer, |
90 compiler.options, | 90 compiler.options, |
91 compiler.resolution, | 91 compiler.resolution, |
92 const TreeShakingEnqueuerStrategy(), | 92 const TreeShakingEnqueuerStrategy(), |
93 compiler.globalDependencies, | 93 compiler.globalDependencies, |
(...skipping 13 matching lines...) Expand all Loading... |
107 .processNativeClasses(compiler.libraryLoader.libraries)); | 107 .processNativeClasses(compiler.libraryLoader.libraries)); |
108 enqueuer.applyImpact( | 108 enqueuer.applyImpact( |
109 backend.computeMainImpact(compiler.mainFunction, forResolution: true)); | 109 backend.computeMainImpact(compiler.mainFunction, forResolution: true)); |
110 enqueuer.forEach((work) { | 110 enqueuer.forEach((work) { |
111 AstElement element = work.element; | 111 AstElement element = work.element; |
112 ResolutionImpact resolutionImpact = build(compiler, element.resolvedAst); | 112 ResolutionImpact resolutionImpact = build(compiler, element.resolvedAst); |
113 WorldImpact worldImpact = compiler.backend.impactTransformer | 113 WorldImpact worldImpact = compiler.backend.impactTransformer |
114 .transformResolutionImpact(enqueuer, resolutionImpact); | 114 .transformResolutionImpact(enqueuer, resolutionImpact); |
115 enqueuer.applyImpact(worldImpact, impactSource: element); | 115 enqueuer.applyImpact(worldImpact, impactSource: element); |
116 }); | 116 }); |
117 ClosedWorld closedWorld = enqueuer.universe.closeWorld(compiler.reporter); | 117 ClosedWorld closedWorld = |
| 118 enqueuer.worldBuilder.closeWorld(compiler.reporter); |
118 | 119 |
119 checkResolutionEnqueuers(compiler.enqueuer.resolution, enqueuer, | 120 checkResolutionEnqueuers(compiler.enqueuer.resolution, enqueuer, |
120 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { | 121 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { |
121 return areTypesEquivalent(unalias(a), unalias(b)); | 122 return areTypesEquivalent(unalias(a), unalias(b)); |
122 }, elementFilter: (Element element) { | 123 }, elementFilter: (Element element) { |
123 if (element is ConstructorElement && element.isRedirectingFactory) { | 124 if (element is ConstructorElement && element.isRedirectingFactory) { |
124 // Redirecting factory constructors are skipped in kernel. | 125 // Redirecting factory constructors are skipped in kernel. |
125 return false; | 126 return false; |
126 } | 127 } |
127 if (element is ClassElement) { | 128 if (element is ClassElement) { |
128 for (ConstructorElement constructor in element.constructors) { | 129 for (ConstructorElement constructor in element.constructors) { |
129 if (!constructor.isRedirectingFactory) { | 130 if (!constructor.isRedirectingFactory) { |
130 return true; | 131 return true; |
131 } | 132 } |
132 } | 133 } |
133 // The class cannot itself be instantiated. | 134 // The class cannot itself be instantiated. |
134 return false; | 135 return false; |
135 } | 136 } |
136 return true; | 137 return true; |
137 }, verbose: arguments.verbose); | 138 }, verbose: arguments.verbose); |
138 checkClosedWorlds(compiler.resolverWorld.closedWorldForTesting, closedWorld, | 139 checkClosedWorlds( |
| 140 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, |
139 verbose: arguments.verbose); | 141 verbose: arguments.verbose); |
140 }); | 142 }); |
141 } | 143 } |
OLD | NEW |