| Index: pkg/compiler/lib/src/compiler.dart
|
| diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
|
| index 27041ccf972cc9c2afd607044c53fdec3355cee5..c2f91fee4123a802c082b4713603f0b074dadf7c 100644
|
| --- a/pkg/compiler/lib/src/compiler.dart
|
| +++ b/pkg/compiler/lib/src/compiler.dart
|
| @@ -76,7 +76,12 @@ 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, WorldImpactBuilderImpl;
|
| +import 'universe/world_impact.dart'
|
| + show
|
| + ImpactStrategy,
|
| + WorldImpact,
|
| + WorldImpactBuilder,
|
| + WorldImpactBuilderImpl;
|
| import 'util/util.dart' show Link, Setlet;
|
| import 'world.dart' show ClosedWorld, ClosedWorldRefiner, OpenWorld, WorldImpl;
|
|
|
| @@ -89,7 +94,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| Measurer get measurer;
|
|
|
| final IdGenerator idGenerator = new IdGenerator();
|
| - WorldImpl _world;
|
| + WorldImpl get _world => resolverWorld.openWorld;
|
| Types types;
|
| _CompilerCoreTypes _coreTypes;
|
| CompilerDiagnosticReporter _reporter;
|
| @@ -139,7 +144,6 @@ abstract class Compiler implements LibraryLoaderListener {
|
| CommonElements get commonElements => _coreTypes;
|
| CoreClasses get coreClasses => _coreTypes;
|
| CoreTypes get coreTypes => _coreTypes;
|
| - CommonMasks get commonMasks => globalInference.masks;
|
| Resolution get resolution => _resolution;
|
| ParsingContext get parsingContext => _parsingContext;
|
|
|
| @@ -184,10 +188,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| /// A customizable filter that is applied to enqueued work items.
|
| QueueFilter enqueuerFilter = new QueueFilter();
|
|
|
| - bool enabledRuntimeType = false;
|
| - bool enabledFunctionApply = false;
|
| - bool enabledInvokeOn = false;
|
| - bool hasIsolateSupport = false;
|
| + bool get hasFunctionApplySupport => resolverWorld.hasFunctionApplySupport;
|
| + bool get hasIsolateSupport => resolverWorld.hasIsolateSupport;
|
|
|
| bool get hasCrashed => _reporter.hasCrashed;
|
|
|
| @@ -216,7 +218,6 @@ abstract class Compiler implements LibraryLoaderListener {
|
| this.userOutputProvider = outputProvider == null
|
| ? const NullCompilerOutput()
|
| : outputProvider {
|
| - _world = new WorldImpl(this);
|
| if (makeReporter != null) {
|
| _reporter = makeReporter(this, options);
|
| } else {
|
| @@ -248,6 +249,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| useKernel: options.useKernel);
|
| backend = jsBackend;
|
| }
|
| + enqueuer = backend.makeEnqueuer();
|
|
|
| if (options.dumpInfo && options.useStartupEmitter) {
|
| throw new ArgumentError(
|
| @@ -279,7 +281,9 @@ abstract class Compiler implements LibraryLoaderListener {
|
| constants = backend.constantCompilerTask,
|
| deferredLoadTask = new DeferredLoadTask(this),
|
| mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this),
|
| - enqueuer = backend.makeEnqueuer(),
|
| + // [enqueuer] is created earlier because it contains the resolution world
|
| + // objects needed by other tasks.
|
| + enqueuer,
|
| dumpInfoTask = new DumpInfoTask(this),
|
| selfTask = new GenericTask('self', measurer),
|
| ];
|
| @@ -646,7 +650,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| // something to the resolution queue. So we cannot wait with
|
| // this until after the resolution queue is processed.
|
| deferredLoadTask.beforeResolution(this);
|
| - impactStrategy = backend.createImpactStrategy(
|
| + ImpactStrategy impactStrategy = backend.createImpactStrategy(
|
| supportDeferredLoad: deferredLoadTask.isProgramSplit,
|
| supportDumpInfo: options.dumpInfo,
|
| supportSerialization: serialization.supportSerialization);
|
| @@ -754,7 +758,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| void closeResolution() {
|
| phase = PHASE_DONE_RESOLVING;
|
|
|
| - openWorld.closeWorld();
|
| + openWorld.closeWorld(reporter);
|
| // Compute whole-program-knowledge that the backend needs. (This might
|
| // require the information computed in [world.closeWorld].)
|
| backend.onResolutionComplete();
|
| @@ -826,28 +830,30 @@ abstract class Compiler implements LibraryLoaderListener {
|
| }
|
|
|
| /**
|
| - * Empty the [world] queue.
|
| + * Empty the [enqueuer] queue.
|
| */
|
| - void emptyQueue(Enqueuer world) =>
|
| - selfTask.measureSubtask("Compiler.emptyQueue", () {
|
| - world.forEach((WorkItem work) {
|
| - reporter.withCurrentElement(
|
| - work.element,
|
| - () => selfTask.measureSubtask("world.applyImpact", () {
|
| - world.applyImpact(
|
| - selfTask.measureSubtask(
|
| - "work.run", () => work.run(this, world)),
|
| - impactSource: work.element);
|
| - }));
|
| - });
|
| + void emptyQueue(Enqueuer enqueuer) {
|
| + selfTask.measureSubtask("Compiler.emptyQueue", () {
|
| + enqueuer.forEach((WorkItem work) {
|
| + reporter.withCurrentElement(
|
| + work.element,
|
| + () => selfTask.measureSubtask("world.applyImpact", () {
|
| + enqueuer.applyImpact(
|
| + impactStrategy,
|
| + selfTask.measureSubtask(
|
| + "work.run", () => work.run(this, enqueuer)),
|
| + impactSource: work.element);
|
| + }));
|
| });
|
| + });
|
| + }
|
|
|
| void processQueue(Enqueuer enqueuer, Element main) {
|
| selfTask.measureSubtask("Compiler.processQueue", () {
|
| WorldImpactBuilderImpl nativeImpact = new WorldImpactBuilderImpl();
|
| enqueuer.nativeEnqueuer
|
| .processNativeClasses(nativeImpact, libraryLoader.libraries);
|
| - enqueuer.applyImpact(nativeImpact);
|
| + enqueuer.applyImpact(impactStrategy, nativeImpact);
|
| if (main != null && !main.isMalformed) {
|
| FunctionElement mainMethod = main;
|
| mainMethod.computeType(resolution);
|
| @@ -2038,6 +2044,13 @@ class _CompilerResolution implements Resolution {
|
| }
|
|
|
| @override
|
| + void ensureClassMembers(ClassElement element) {
|
| + if (!compiler.serialization.isDeserialized(element)) {
|
| + compiler.resolver.checkClass(element);
|
| + }
|
| + }
|
| +
|
| + @override
|
| void registerCompileTimeError(Element element, DiagnosticMessage message) =>
|
| compiler.registerCompileTimeError(element, message);
|
|
|
| @@ -2138,7 +2151,8 @@ class _CompilerResolution implements Resolution {
|
| WorldImpact transformResolutionImpact(
|
| Element element, ResolutionImpact resolutionImpact) {
|
| WorldImpact worldImpact = compiler.backend.impactTransformer
|
| - .transformResolutionImpact(compiler.enqueuer.resolution, resolutionImpact);
|
| + .transformResolutionImpact(
|
| + compiler.enqueuer.resolution, resolutionImpact);
|
| _worldImpactCache[element] = worldImpact;
|
| return worldImpact;
|
| }
|
|
|