Index: pkg/compiler/lib/src/compiler.dart |
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart |
index 6ad622e190913cf75c361c9feaacd41085f8ad24..20b5130a04e248c8602e21ec6f5145b9f3ca9d20 100644 |
--- a/pkg/compiler/lib/src/compiler.dart |
+++ b/pkg/compiler/lib/src/compiler.dart |
@@ -39,7 +39,8 @@ import 'elements/resolution_types.dart' |
ResolutionDynamicType, |
ResolutionInterfaceType, |
Types; |
-import 'enqueue.dart' show Enqueuer, EnqueueTask, ResolutionEnqueuer; |
+import 'enqueue.dart' |
+ show DeferredAction, Enqueuer, EnqueueTask, ResolutionEnqueuer; |
import 'environment.dart'; |
import 'id_generator.dart'; |
import 'io/source_information.dart' show SourceInformation; |
@@ -575,17 +576,32 @@ abstract class Compiler implements LibraryLoaderListener { |
.loadLibrary(libraryUri, skipFileWithPartOfTag: true) |
.then((LibraryElement library) { |
if (library == null) return null; |
- enqueuer.resolution.applyImpact(computeImpactForLibrary(library)); |
- emptyQueue(enqueuer.resolution, onProgress: showResolutionProgress); |
- enqueuer.resolution.logSummary(reporter.log); |
+ ResolutionEnqueuer resolutionEnqueuer = startResolution(); |
+ resolutionEnqueuer.applyImpact(computeImpactForLibrary(library)); |
+ emptyQueue(resolutionEnqueuer, onProgress: showResolutionProgress); |
+ resolutionEnqueuer.logSummary(reporter.log); |
return library; |
}); |
} |
+ /// Starts the resolution phase, creating the [ResolutionEnqueuer] if not |
+ /// already created. |
Siggi Cherem (dart-lang)
2017/03/14 05:27:55
why would it be created before? or is that only in
Johnni Winther
2017/03/15 12:46:53
Due to [analyzeUri]. Added to the comment.
|
+ ResolutionEnqueuer startResolution() { |
+ ResolutionEnqueuer resolutionEnqueuer; |
+ if (enqueuer.hasResolution) { |
+ resolutionEnqueuer = enqueuer.resolution; |
+ } else { |
+ resolutionEnqueuer = enqueuer.createResolutionEnqueuer(); |
+ backend.onResolutionStart(resolutionEnqueuer); |
+ } |
+ resolutionEnqueuer.addDeferredActions(libraryLoader.pullDeferredActions()); |
+ return resolutionEnqueuer; |
+ } |
+ |
/// Performs the compilation when all libraries have been loaded. |
void compileLoadedLibraries() => |
selfTask.measureSubtask("Compiler.compileLoadedLibraries", () { |
- Enqueuer resolutionEnqueuer = enqueuer.createResolutionEnqueuer(); |
+ ResolutionEnqueuer resolutionEnqueuer = startResolution(); |
WorldImpact mainImpact = computeMain(); |
mirrorUsageAnalyzerTask.analyzeUsage(mainApp); |