Index: pkg/compiler/lib/src/compiler.dart |
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart |
index 536a2794bbbb4aab262ea5c37792bdea108da24f..c2dad31db863edc336d78b9bc1159352e74b27ff 100644 |
--- a/pkg/compiler/lib/src/compiler.dart |
+++ b/pkg/compiler/lib/src/compiler.dart |
@@ -76,7 +76,8 @@ import 'universe/selector.dart' show Selector; |
import 'universe/world_builder.dart' |
show ResolutionWorldBuilder, CodegenWorldBuilder; |
import 'universe/use.dart' show StaticUse; |
-import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact; |
+import 'universe/world_impact.dart' |
+ show ImpactStrategy, WorldImpact, WorldImpactBuilderImpl; |
import 'util/util.dart' show Link, Setlet; |
import 'world.dart' show ClosedWorld, ClosedWorldRefiner, OpenWorld, WorldImpl; |
@@ -114,16 +115,6 @@ abstract class Compiler implements LibraryLoaderListener { |
*/ |
GlobalDependencyRegistry globalDependencies; |
- /** |
- * Dependencies that are only included due to mirrors. |
- * |
- * We should get rid of this and ensure that all dependencies are |
- * associated with a particular element. |
- */ |
- // TODO(johnniwinther): This should not be a [ResolutionRegistry]. |
- final Registry mirrorDependencies = |
- new ResolutionRegistry(null, new TreeElementMapping(null)); |
- |
/// Options provided from command-line arguments. |
final CompilerOptions options; |
@@ -687,7 +678,7 @@ abstract class Compiler implements LibraryLoaderListener { |
} |
// Elements required by enqueueHelpers are global dependencies |
// that are not pulled in by a particular element. |
- backend.enqueueHelpers(enqueuer.resolution, globalDependencies); |
+ backend.enqueueHelpers(enqueuer.resolution); |
resolveLibraryMetadata(); |
reporter.log('Resolving...'); |
processQueue(enqueuer.resolution, mainFunction); |
@@ -737,7 +728,6 @@ abstract class Compiler implements LibraryLoaderListener { |
reporter.log('Compiling...'); |
phase = PHASE_COMPILING; |
backend.onCodegenStart(); |
- // TODO(johnniwinther): Move these to [CodegenEnqueuer]. |
if (hasIsolateSupport) { |
backend.enableIsolateSupport(enqueuer.codegen); |
} |
@@ -817,7 +807,7 @@ abstract class Compiler implements LibraryLoaderListener { |
ClassElement cls = element; |
cls.ensureResolved(resolution); |
cls.forEachLocalMember(enqueuer.resolution.addToWorkList); |
- backend.registerInstantiatedType(cls.rawType, world, globalDependencies); |
+ world.registerInstantiatedType(cls.rawType); |
} else { |
world.addToWorkList(element); |
} |
@@ -853,43 +843,42 @@ abstract class Compiler implements LibraryLoaderListener { |
}); |
}); |
- void processQueue(Enqueuer world, Element main) => |
- selfTask.measureSubtask("Compiler.processQueue", () { |
- world.nativeEnqueuer.processNativeClasses(libraryLoader.libraries); |
- if (main != null && !main.isMalformed) { |
- FunctionElement mainMethod = main; |
- mainMethod.computeType(resolution); |
- if (mainMethod.functionSignature.parameterCount != 0) { |
- // The first argument could be a list of strings. |
- backend.backendClasses.listImplementation |
- .ensureResolved(resolution); |
- backend.registerInstantiatedType( |
- backend.backendClasses.listImplementation.rawType, |
- world, |
- globalDependencies); |
- backend.backendClasses.stringImplementation |
- .ensureResolved(resolution); |
- backend.registerInstantiatedType( |
- backend.backendClasses.stringImplementation.rawType, |
- world, |
- globalDependencies); |
- |
- backend.registerMainHasArguments(world); |
- } |
- world.addToWorkList(main); |
+ void processQueue(Enqueuer enqueuer, Element main) { |
+ selfTask.measureSubtask("Compiler.processQueue", () { |
+ WorldImpactBuilderImpl nativeImpact = new WorldImpactBuilderImpl(); |
+ enqueuer.nativeEnqueuer |
+ .processNativeClasses(nativeImpact, libraryLoader.libraries); |
+ enqueuer.applyImpact(nativeImpact); |
+ if (main != null && !main.isMalformed) { |
+ FunctionElement mainMethod = main; |
+ mainMethod.computeType(resolution); |
+ if (mainMethod.functionSignature.parameterCount != 0) { |
+ // The first argument could be a list of strings. |
+ backend.backendClasses.listImplementation.ensureResolved(resolution); |
+ enqueuer.registerInstantiatedType( |
+ backend.backendClasses.listImplementation.rawType); |
+ backend.backendClasses.stringImplementation |
+ .ensureResolved(resolution); |
+ enqueuer.registerInstantiatedType( |
+ backend.backendClasses.stringImplementation.rawType); |
+ |
+ backend.registerMainHasArguments(enqueuer); |
} |
- if (options.verbose) { |
- progress.reset(); |
- } |
- emptyQueue(world); |
- world.queueIsClosed = true; |
- // Notify the impact strategy impacts are no longer needed for this |
- // enqueuer. |
- impactStrategy.onImpactUsed(world.impactUse); |
- backend.onQueueClosed(); |
- assert( |
- compilationFailed || world.checkNoEnqueuedInvokedInstanceMethods()); |
- }); |
+ enqueuer.addToWorkList(main); |
+ } |
+ if (options.verbose) { |
+ progress.reset(); |
+ } |
+ emptyQueue(enqueuer); |
+ enqueuer.queueIsClosed = true; |
+ // Notify the impact strategy impacts are no longer needed for this |
+ // enqueuer. |
+ impactStrategy.onImpactUsed(enqueuer.impactUse); |
+ backend.onQueueClosed(); |
+ assert(compilationFailed || |
+ enqueuer.checkNoEnqueuedInvokedInstanceMethods()); |
+ }); |
+ } |
/** |
* Perform various checks of the queues. This includes checking that |
@@ -2150,7 +2139,8 @@ class _CompilerResolution implements Resolution { |
WorldImpact transformResolutionImpact( |
Element element, ResolutionImpact resolutionImpact) { |
WorldImpact worldImpact = compiler.backend.impactTransformer |
- .transformResolutionImpact(resolutionImpact); |
+ .transformResolutionImpact( |
+ compiler.enqueuer.resolution, resolutionImpact); |
_worldImpactCache[element] = worldImpact; |
return worldImpact; |
} |