| Index: pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
|
| index 7874295ebbbd488f2bd4a54ffab68d5dc90e6cc1..5a0c8310999f45432ff4977830c0c31b4c689481 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
|
| @@ -101,7 +101,7 @@ class KernelTarget extends TargetImplementation {
|
| final Map<String, Source> uriToSource;
|
|
|
| SourceLoader<Library> loader;
|
| - Program program;
|
| + Program _program;
|
|
|
| final List errors = [];
|
|
|
| @@ -225,14 +225,14 @@ class KernelTarget extends TargetImplementation {
|
| print(message);
|
| errors.add(message);
|
| }
|
| - program = erroneousProgram(isFullProgram);
|
| + _program = erroneousProgram(isFullProgram);
|
| return uri == null
|
| - ? new Future<Program>.value(program)
|
| - : writeLinkedProgram(uri, program, isFullProgram: isFullProgram);
|
| + ? new Future<Program>.value(_program)
|
| + : writeLinkedProgram(uri, _program, isFullProgram: isFullProgram);
|
| }
|
|
|
| @override
|
| - Future<Null> computeOutline({CanonicalName nameRoot}) async {
|
| + Future<Program> buildOutlines({CanonicalName nameRoot}) async {
|
| if (loader.first == null) return null;
|
| try {
|
| loader.createTypeInferenceEngine();
|
| @@ -250,23 +250,24 @@ class KernelTarget extends TargetImplementation {
|
| installDefaultConstructors(sourceClasses);
|
| loader.resolveConstructors();
|
| loader.finishTypeVariables(objectClassBuilder);
|
| - program =
|
| + _program =
|
| link(new List<Library>.from(loader.libraries), nameRoot: nameRoot);
|
| - loader.computeHierarchy(program);
|
| + loader.computeHierarchy(_program);
|
| loader.checkOverrides(sourceClasses);
|
| loader.prepareInitializerInference();
|
| loader.performInitializerInference();
|
| + return _program;
|
| } on InputError catch (e) {
|
| - await handleInputError(null, e, isFullProgram: false);
|
| + return handleInputError(null, e, isFullProgram: false);
|
| } catch (e, s) {
|
| - await reportCrash(e, s, loader?.currentUriForCrashReporting);
|
| + return reportCrash(e, s, loader?.currentUriForCrashReporting);
|
| }
|
| }
|
|
|
| Future<Null> writeOutline(Uri uri) async {
|
| try {
|
| if (uri != null) {
|
| - await writeLinkedProgram(uri, program, isFullProgram: false);
|
| + await writeLinkedProgram(uri, _program, isFullProgram: false);
|
| }
|
| } on InputError catch (e) {
|
| handleInputError(uri, e, isFullProgram: false);
|
| @@ -275,11 +276,11 @@ class KernelTarget extends TargetImplementation {
|
| }
|
| }
|
|
|
| - Future<Program> writeProgram(Uri uri,
|
| - {bool dumpIr: false, bool verify: false}) async {
|
| + @override
|
| + Future<Program> buildProgram() async {
|
| if (loader.first == null) return null;
|
| if (errors.isNotEmpty) {
|
| - return handleInputError(uri, null, isFullProgram: true);
|
| + return handleInputError(null, null, isFullProgram: true);
|
| }
|
| try {
|
| await loader.buildBodies();
|
| @@ -288,14 +289,25 @@ class KernelTarget extends TargetImplementation {
|
| loader.finishNativeMethods();
|
| runBuildTransformations();
|
|
|
| - if (dumpIr) this.dumpIr();
|
| - if (verify) this.verify();
|
| errors.addAll(loader.collectCompileTimeErrors().map((e) => e.format()));
|
| if (errors.isNotEmpty) {
|
| - return handleInputError(uri, null, isFullProgram: true);
|
| + return handleInputError(null, null, isFullProgram: true);
|
| }
|
| - if (uri == null) return program;
|
| - return await writeLinkedProgram(uri, program, isFullProgram: true);
|
| + return _program;
|
| + } on InputError catch (e) {
|
| + return handleInputError(null, e, isFullProgram: true);
|
| + } catch (e, s) {
|
| + return reportCrash(e, s, loader?.currentUriForCrashReporting);
|
| + }
|
| + }
|
| +
|
| + Future<Null> writeProgram(Uri uri,
|
| + {bool dumpIr: false, bool verify: false}) async {
|
| + if (loader.first == null) return null;
|
| + try {
|
| + if (dumpIr) this.dumpIr();
|
| + if (verify) this.verify();
|
| + await writeLinkedProgram(uri, _program, isFullProgram: true);
|
| } on InputError catch (e) {
|
| return handleInputError(uri, e, isFullProgram: true);
|
| } catch (e, s) {
|
| @@ -691,18 +703,18 @@ class KernelTarget extends TargetImplementation {
|
| void runLinkTransformations(Program program) {}
|
|
|
| void transformMixinApplications() {
|
| - new MixinFullResolution().transform(program);
|
| + new MixinFullResolution().transform(_program);
|
| ticker.logMs("Transformed mixin applications");
|
| }
|
|
|
| void otherTransformations() {
|
| // TODO(ahe): Don't generate type variables in the first place.
|
| if (!strongMode) {
|
| - program.accept(new Erasure());
|
| + _program.accept(new Erasure());
|
| ticker.logMs("Erased type variables in generic methods");
|
| }
|
| // TODO(kmillikin): Make this run on a per-method basis.
|
| - transformAsync.transformProgram(program);
|
| + transformAsync.transformProgram(_program);
|
| ticker.logMs("Transformed async methods");
|
| }
|
|
|
| @@ -717,7 +729,7 @@ class KernelTarget extends TargetImplementation {
|
| }
|
|
|
| void verify() {
|
| - errors.addAll(verifyProgram(program));
|
| + errors.addAll(verifyProgram(_program));
|
| ticker.logMs("Verified program");
|
| }
|
| }
|
|
|