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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta; 5 library fasta;
6 6
7 import 'dart:async' show Future; 7 import 'dart:async' show Future;
8 8
9 import 'dart:convert' show JSON; 9 import 'dart:convert' show JSON;
10 10
11 import 'dart:io' show BytesBuilder, Directory, File, exitCode; 11 import 'dart:io' show BytesBuilder, Directory, File, exitCode;
12 12
13 import 'package:front_end/physical_file_system.dart'; 13 import 'package:front_end/physical_file_system.dart';
14 import 'package:kernel/binary/ast_to_binary.dart' 14 import 'package:kernel/binary/ast_to_binary.dart'
15 show LibraryFilteringBinaryPrinter; 15 show LibraryFilteringBinaryPrinter;
16 16
17 import 'package:kernel/kernel.dart' show Program, Library; 17 import 'package:kernel/kernel.dart' show Library, Program, loadProgramFromBytes;
18 18
19 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget; 19 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
20 20
21 import 'compiler_command_line.dart' show CompilerCommandLine; 21 import 'compiler_command_line.dart' show CompilerCommandLine;
22 22
23 import 'compiler_context.dart' show CompilerContext; 23 import 'compiler_context.dart' show CompilerContext;
24 24
25 import 'errors.dart' show InputError, formatUnexpected, inputError, reportCrash; 25 import 'errors.dart' show InputError, formatUnexpected, inputError, reportCrash;
26 26
27 import 'kernel/kernel_target.dart' show KernelTarget; 27 import 'kernel/kernel_target.dart' show KernelTarget;
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 return new CompilationResult.error( 173 return new CompilationResult.error(
174 formatUnexpected(patchedSdk, -1, "Patched sdk directory not found.")); 174 formatUnexpected(patchedSdk, -1, "Patched sdk directory not found."));
175 } 175 }
176 176
177 Program program; 177 Program program;
178 try { 178 try {
179 TranslateUri uriTranslator = 179 TranslateUri uriTranslator =
180 await TranslateUri.parse(PhysicalFileSystem.instance, null, packages); 180 await TranslateUri.parse(PhysicalFileSystem.instance, null, packages);
181 final Ticker ticker = new Ticker(isVerbose: verbose); 181 final Ticker ticker = new Ticker(isVerbose: verbose);
182 final DillTarget dillTarget = new DillTarget(ticker, uriTranslator); 182 final DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
183 dillTarget.read(patchedSdk.resolve('platform.dill')); 183 _appendDillForUri(dillTarget, patchedSdk.resolve('platform.dill'));
184 final KernelTarget kernelTarget = new KernelTarget( 184 final KernelTarget kernelTarget = new KernelTarget(
185 PhysicalFileSystem.instance, dillTarget, uriTranslator, strongMode); 185 PhysicalFileSystem.instance, dillTarget, uriTranslator, strongMode);
186 kernelTarget.read(fileName); 186 kernelTarget.read(fileName);
187 await dillTarget.writeOutline(null); 187 await dillTarget.writeOutline(null);
188 program = await kernelTarget.writeOutline(null); 188 program = await kernelTarget.writeOutline(null);
189 program = await kernelTarget.writeProgram(null); 189 program = await kernelTarget.writeProgram(null);
190 if (kernelTarget.errors.isNotEmpty) { 190 if (kernelTarget.errors.isNotEmpty) {
191 return new CompilationResult.errors(kernelTarget.errors 191 return new CompilationResult.errors(kernelTarget.errors
192 .map((err) => err.toString()) 192 .map((err) => err.toString())
193 .toList(growable: false)); 193 .toList(growable: false));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 Ticker ticker = new Ticker(isVerbose: verbose); 242 Ticker ticker = new Ticker(isVerbose: verbose);
243 await CompilerCommandLine.withGlobalOptions("", [""], 243 await CompilerCommandLine.withGlobalOptions("", [""],
244 (CompilerContext c) async { 244 (CompilerContext c) async {
245 c.options.options["--packages"] = packages; 245 c.options.options["--packages"] = packages;
246 if (verbose) { 246 if (verbose) {
247 c.options.options["--verbose"] = true; 247 c.options.options["--verbose"] = true;
248 } 248 }
249 249
250 TranslateUri uriTranslator = await TranslateUri.parse( 250 TranslateUri uriTranslator = await TranslateUri.parse(
251 c.fileSystem, c.options.sdk, c.options.packages); 251 c.fileSystem, c.options.sdk, c.options.packages);
252 ticker.logMs("Read packages file"); 252 ticker.logMs("Read platform file");
253 DillTarget dillTarget = new DillTarget(ticker, uriTranslator) 253 DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
254 ..read(platform); 254 _appendDillForUri(dillTarget, platform);
255 KernelTarget kernelTarget = new KernelTarget(PhysicalFileSystem.instance, 255 KernelTarget kernelTarget = new KernelTarget(PhysicalFileSystem.instance,
256 dillTarget, uriTranslator, false, c.uriToSource); 256 dillTarget, uriTranslator, false, c.uriToSource);
257 257
258 kernelTarget.read(script); 258 kernelTarget.read(script);
259 await dillTarget.writeOutline(null); 259 await dillTarget.writeOutline(null);
260 await kernelTarget.loader.buildOutlines(); 260 await kernelTarget.loader.buildOutlines();
261 await kernelTarget.writeDepsFile(output, depsFile, 261 await kernelTarget.writeDepsFile(output, depsFile,
262 extraDependencies: extraDependencies); 262 extraDependencies: extraDependencies);
263 }); 263 });
264 } 264 }
265 265
266 /// 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
267 /// libraries to the [dillTarget].
268 void _appendDillForUri(DillTarget dillTarget, Uri uri) {
269 if (uri != null) {
270 var bytes = new File.fromUri(uri).readAsBytesSync();
271 var platformProgram = loadProgramFromBytes(bytes);
272 dillTarget.loader.addDill(platformProgram);
273 }
274 }
275
266 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28316 276 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28316
267 class ByteSink implements Sink<List<int>> { 277 class ByteSink implements Sink<List<int>> {
268 final BytesBuilder builder = new BytesBuilder(); 278 final BytesBuilder builder = new BytesBuilder();
269 279
270 void add(List<int> data) { 280 void add(List<int> data) {
271 builder.add(data); 281 builder.add(data);
272 } 282 }
273 283
274 void close() { 284 void close() {
275 // Nothing to do. 285 // Nothing to do.
276 } 286 }
277 } 287 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698