Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/kernel/utils.dart |
| diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart |
| index df9748ba387553c27d01cb8690ec00f48eefa775..2affe6676d47c87e1ef30092d3979f3c77306ed3 100644 |
| --- a/pkg/front_end/lib/src/fasta/kernel/utils.dart |
| +++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart |
| @@ -8,6 +8,7 @@ import 'dart:io'; |
| import 'package:front_end/src/scanner/token.dart' show Token; |
| import 'package:kernel/ast.dart'; |
| import 'package:kernel/binary/ast_to_binary.dart'; |
| +import 'package:kernel/binary/limited_ast_to_binary.dart'; |
| import 'package:kernel/text/ast_to_text.dart'; |
| /// A null-aware alternative to `token.offset`. If [token] is `null`, returns |
| @@ -39,3 +40,26 @@ Future<Null> writeProgramToFile(Program program, Uri uri) async { |
| await sink.close(); |
| } |
| } |
| + |
| +/// Serialize the libraries in [program] that match [filter]. |
| +List<int> serializeProgram(Program program, |
| + {bool filter(Library library), bool excludeUriToSource: false}) { |
| + ByteSink byteSink = new ByteSink(); |
| + var printer = filter == null && !excludeUriToSource |
|
ahe
2017/07/05 13:29:39
Put type on printer.
Siggi Cherem (dart-lang)
2017/07/05 18:42:10
Done.
|
| + ? new BinaryPrinter(byteSink) |
| + : new LimitedBinaryPrinter( |
| + byteSink, filter ?? (_) => true, excludeUriToSource); |
| + printer.writeProgramFile(program); |
| + return byteSink.builder.takeBytes(); |
| +} |
| + |
| +/// A [Sink] that directly writes data into a byte builder. |
| +class ByteSink implements Sink<List<int>> { |
| + final BytesBuilder builder = new BytesBuilder(); |
| + |
| + void add(List<int> data) { |
| + builder.add(data); |
| + } |
| + |
| + void close() {} |
| +} |