| 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 |