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

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

Issue 2872903005: Rework DillLoader to allow adding multiple dills. (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/fasta.dart
diff --git a/pkg/front_end/lib/src/fasta/fasta.dart b/pkg/front_end/lib/src/fasta/fasta.dart
index eb4867d749ca587417494de17966fb440e0cc79a..d48af9a94e03619e92229920714250d6dc7a57b6 100644
--- a/pkg/front_end/lib/src/fasta/fasta.dart
+++ b/pkg/front_end/lib/src/fasta/fasta.dart
@@ -14,7 +14,7 @@ import 'package:front_end/physical_file_system.dart';
import 'package:kernel/binary/ast_to_binary.dart'
show LibraryFilteringBinaryPrinter;
-import 'package:kernel/kernel.dart' show Program, Library;
+import 'package:kernel/kernel.dart' show Library, Program, loadProgramFromBytes;
import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
@@ -180,7 +180,7 @@ Future<CompilationResult> parseScript(
await TranslateUri.parse(PhysicalFileSystem.instance, null, packages);
final Ticker ticker = new Ticker(isVerbose: verbose);
final DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
- dillTarget.read(patchedSdk.resolve('platform.dill'));
+ _appendDillForUri(dillTarget, patchedSdk.resolve('platform.dill'));
final KernelTarget kernelTarget = new KernelTarget(
PhysicalFileSystem.instance, dillTarget, uriTranslator, strongMode);
kernelTarget.read(fileName);
@@ -249,9 +249,9 @@ Future writeDepsFile(Uri script, Uri depsFile, Uri output,
TranslateUri uriTranslator = await TranslateUri.parse(
c.fileSystem, c.options.sdk, c.options.packages);
- ticker.logMs("Read packages file");
- DillTarget dillTarget = new DillTarget(ticker, uriTranslator)
- ..read(platform);
+ ticker.logMs("Read platform file");
+ DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
+ _appendDillForUri(dillTarget, platform);
KernelTarget kernelTarget = new KernelTarget(PhysicalFileSystem.instance,
dillTarget, uriTranslator, false, c.uriToSource);
@@ -263,6 +263,16 @@ Future writeDepsFile(Uri script, Uri depsFile, Uri output,
});
}
+/// If the [uri] is not empty, load a [Program] from it and append its
Siggi Cherem (dart-lang) 2017/05/09 20:14:30 nit: "empty" => "null" Do we have any cases where
scheglov 2017/05/09 20:32:22 I think we don't. In one case the "platform" is a
+/// libraries to the [dillTarget].
+void _appendDillForUri(DillTarget dillTarget, Uri uri) {
+ if (uri != null) {
+ var bytes = new File.fromUri(uri).readAsBytesSync();
+ var platformProgram = loadProgramFromBytes(bytes);
+ dillTarget.loader.addDill(platformProgram);
+ }
+}
+
// TODO(ahe): https://github.com/dart-lang/sdk/issues/28316
class ByteSink implements Sink<List<int>> {
final BytesBuilder builder = new BytesBuilder();

Powered by Google App Engine
This is Rietveld 408576698