Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_target.dart

Issue 2893493004: First step for modular output in fasta. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8ec51b3db2366e2e3e0e87e6ab0b2bdc6ee37698..893b8748770deae04868adb09269e409eac52010 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -86,6 +86,7 @@ import 'kernel_builder.dart'
TypeVariableBuilder;
import 'verifier.dart' show verifyProgram;
+import 'kernel_outline_shaker.dart' show trimProgram;
class KernelTarget extends TargetImplementation {
/// The [FileSystem] which should be used to access files.
@@ -218,13 +219,18 @@ class KernelTarget extends TargetImplementation {
}
Future<Program> handleInputError(Uri uri, InputError error,
- {bool isFullProgram}) {
+ {bool isFullProgram, bool trimDependencies: false}) {
if (error != null) {
String message = error.format();
print(message);
errors.add(message);
}
_program = erroneousProgram(isFullProgram);
+ if (trimDependencies) {
+ var excluded =
+ dillTarget.loader.libraries.map((lib) => lib.importUri).toSet();
+ trimProgram(_program, (uri) => !excluded.contains(uri));
+ }
return uri == null
? new Future<Program>.value(_program)
: writeLinkedProgram(uri, _program, isFullProgram: isFullProgram);
@@ -249,13 +255,13 @@ class KernelTarget extends TargetImplementation {
installDefaultConstructors(sourceClasses);
loader.resolveConstructors();
loader.finishTypeVariables(objectClassBuilder);
- _program =
+ var outline =
link(new List<Library>.from(loader.libraries), nameRoot: nameRoot);
- loader.computeHierarchy(_program);
+ loader.computeHierarchy(outline);
loader.checkOverrides(sourceClasses);
loader.prepareInitializerInference();
loader.performInitializerInference();
- return _program;
+ return _program = outline;
} on InputError catch (e) {
return handleInputError(null, e, isFullProgram: false);
} catch (e, s) {
@@ -269,20 +275,24 @@ class KernelTarget extends TargetImplementation {
await writeLinkedProgram(uri, _program, isFullProgram: false);
}
} on InputError catch (e) {
- handleInputError(uri, e, isFullProgram: false);
+ handleInputError(uri, e, isFullProgram: false, trimDependencies: false);
} catch (e, s) {
reportCrash(e, s, loader?.currentUriForCrashReporting);
}
}
@override
- Future<Program> buildProgram({bool verify: false}) async {
+ Future<Program> buildProgram(
+ {bool verify: false, bool trimDependencies: false}) async {
if (loader.first == null) return null;
if (errors.isNotEmpty) {
- return handleInputError(null, null, isFullProgram: true);
+ return handleInputError(null, null,
+ isFullProgram: true, trimDependencies: trimDependencies);
}
try {
await loader.buildBodies();
+ _program = link(new List<Library>.from(loader.libraries),
+ trimDependencies: trimDependencies);
loader.finishStaticInvocations();
finishAllConstructors();
loader.finishNativeMethods();
@@ -291,11 +301,13 @@ class KernelTarget extends TargetImplementation {
if (verify) this.verify();
errors.addAll(loader.collectCompileTimeErrors().map((e) => e.format()));
if (errors.isNotEmpty) {
- return handleInputError(null, null, isFullProgram: true);
+ return handleInputError(null, null,
+ isFullProgram: true, trimDependencies: trimDependencies);
}
return _program;
} on InputError catch (e) {
- return handleInputError(null, e, isFullProgram: true);
+ return handleInputError(null, e,
+ isFullProgram: true, trimDependencies: trimDependencies);
} catch (e, s) {
return reportCrash(e, s, loader?.currentUriForCrashReporting);
}
@@ -390,11 +402,13 @@ class KernelTarget extends TargetImplementation {
/// Creates a program by combining [libraries] with the libraries of
/// `dillTarget.loader.program`.
- Program link(List<Library> libraries, {CanonicalName nameRoot}) {
+ Program link(List<Library> libraries,
+ {CanonicalName nameRoot, trimDependencies: false}) {
Map<String, Source> uriToSource =
new Map<String, Source>.from(this.uriToSource);
- libraries.addAll(dillTarget.loader.libraries);
+ List<Library> extraLibraries = dillTarget.loader.libraries;
+ libraries.addAll(extraLibraries);
// TODO(scheglov) Should we also somehow update `uriToSource`?
// uriToSource.addAll(binary.uriToSource);
@@ -405,14 +419,17 @@ class KernelTarget extends TargetImplementation {
Program program = new Program(
nameRoot: nameRoot, libraries: libraries, uriToSource: uriToSource);
if (loader.first != null) {
+ // TODO(sigmund): do only for full program
Builder builder = loader.first.lookup("main", -1, null);
if (builder is KernelProcedureBuilder) {
program.mainMethod = builder.procedure;
}
}
- if (errors.isEmpty || dillTarget.isLoaded) {
- runLinkTransformations(program);
+ if (trimDependencies) {
+ var excluded = extraLibraries.map((lib) => lib.importUri).toSet();
+ trimProgram(program, (uri) => !excluded.contains(uri));
}
+
ticker.logMs("Linked program");
return program;
}
@@ -696,9 +713,6 @@ class KernelTarget extends TargetImplementation {
otherTransformations();
}
- /// Run all transformations that are needed when linking a program.
- void runLinkTransformations(Program program) {}
-
void transformMixinApplications() {
new MixinFullResolution().transform(_program);
ticker.logMs("Transformed mixin applications");

Powered by Google App Engine
This is Rietveld 408576698