mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:07:49 +00:00
ba241c0c8d
This carries a number of benefits: - It allows the front end to trivially support schemes other than "file:" (e.g. "http:") by allowing the client to supply a FileSystem implementation that handles them. - It is more consistent with the functionality of the ".packages" file (which allows packages to map to any kind of URI). - It allows the "bazel root" feature to be rewritten to use a magic scheme rather than a magic path. (This eliminates concerns about the magic path overlapping with a user's use case). Note that this feature has been renamed to "multi root" since it is sufficiently generic to be applicable to build systems other than Bazel. - It reduces the risk of forgetting to use the front end's FileSystem abstraction to access the file system, since the native file system interfaces do not accept URIs. R=danrubel@google.com Review-Url: https://codereview.chromium.org/2614063007 .
30 lines
900 B
Dart
30 lines
900 B
Dart
import 'dart:async';
|
|
|
|
import 'package:front_end/kernel_generator.dart';
|
|
import 'package:front_end/compiler_options.dart';
|
|
import 'package:kernel/binary/ast_to_binary.dart';
|
|
import 'package:kernel/kernel.dart' show Program;
|
|
|
|
Future dumpToSink(Program program, StreamSink<List<int>> sink) {
|
|
new BinaryPrinter(sink).writeProgramFile(program);
|
|
return sink.close();
|
|
}
|
|
|
|
Future kernelToSink(Uri entry, StreamSink<List<int>> sink) async {
|
|
var program = await kernelForProgram(
|
|
entry,
|
|
new CompilerOptions()
|
|
..sdkRoot = new Uri.file('sdk')
|
|
..packagesFileUri = new Uri.file('.packages')
|
|
..onError = (e) => print(e.message));
|
|
|
|
await dumpToSink(program, sink);
|
|
}
|
|
|
|
main(args) async {
|
|
kernelToSink(
|
|
Uri.base.resolve(args[0]),
|
|
// TODO(sigmund,hausner): define memory type where to dump binary data.
|
|
new StreamController<List<int>>.broadcast().sink);
|
|
}
|