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 88cea4b0b140dcd2ade6ba3506206afe400f63ec..d7c5e39c6444397da82214c766953d35372189aa 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart |
@@ -97,7 +97,8 @@ class KernelTarget extends TargetImplementation { |
final Map<String, Source> uriToSource; |
SourceLoader<Library> loader; |
- Program _program; |
+ |
+ Program program; |
final List<String> errors = <String>[]; |
@@ -222,7 +223,7 @@ class KernelTarget extends TargetImplementation { |
print(message); |
errors.add(message); |
} |
- _program = erroneousProgram(isFullProgram); |
+ program = erroneousProgram(isFullProgram); |
} |
@override |
@@ -244,9 +245,9 @@ 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(); |
@@ -255,7 +256,7 @@ class KernelTarget extends TargetImplementation { |
} catch (e, s) { |
return reportCrash(e, s, loader?.currentUriForCrashReporting); |
} |
- return _program; |
+ return program; |
} |
/// Build the kernel representation of the program loaded by this target. The |
@@ -278,7 +279,7 @@ class KernelTarget extends TargetImplementation { |
if (errors.isNotEmpty) { |
handleInputError(null, |
isFullProgram: true, trimDependencies: trimDependencies); |
- return _program; |
+ return program; |
} |
try { |
@@ -301,7 +302,7 @@ class KernelTarget extends TargetImplementation { |
return reportCrash(e, s, loader?.currentUriForCrashReporting); |
} |
if (trimDependencies) trimDependenciesInProgram(); |
- return _program; |
+ return program; |
} |
Future writeDepsFile(Uri output, Uri depsFile, |
@@ -664,24 +665,26 @@ class KernelTarget extends TargetImplementation { |
} |
void otherTransformations() { |
- // TODO(ahe): Don't generate type variables in the first place. |
if (!strongMode) { |
- _program.accept(new Erasure()); |
+ // TODO(ahe): Don't generate type variables in the first place. |
+ program.accept(new Erasure()); |
ticker.logMs("Erased type variables in generic methods"); |
} |
- // TODO(kmillikin): Make this run on a per-method basis. |
- transformAsync.transformLibraries(loader.coreTypes, loader.libraries); |
+ if (errors.isEmpty && loader.collectCompileTimeErrors().isEmpty) { |
+ // TODO(kmillikin): Make this run on a per-method basis. |
+ transformAsync.transformLibraries(loader.coreTypes, loader.libraries); |
+ } |
ticker.logMs("Transformed async methods"); |
} |
void verify() { |
- var verifyErrors = verifyProgram(_program); |
+ var verifyErrors = verifyProgram(program); |
errors.addAll(verifyErrors.map((error) => '$error')); |
ticker.logMs("Verified program"); |
} |
/// Tree-shakes most code from the [dillTarget] by visiting all other |
- /// libraries in [_program] and marking the APIs from the [dillTarget] |
+ /// libraries in [program] and marking the APIs from the [dillTarget] |
/// libraries that are in use. |
/// |
/// Note: while it's likely we'll do some trimming of programs for modular |
@@ -697,8 +700,8 @@ class KernelTarget extends TargetImplementation { |
// TODO(sigmund): replace this step with data that is directly computed from |
// the builders: we should know the tree-shaking roots without having to do |
// a second visit over the tree. |
- new RootsMarker(loader.coreTypes, data).run(_program, isIncluded); |
- trimProgram(_program, data, isIncluded); |
+ new RootsMarker(loader.coreTypes, data).run(program, isIncluded); |
+ trimProgram(program, data, isIncluded); |
} |
/// Return `true` if the given [library] was built by this [KernelTarget] |