OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:io'; | 6 import 'dart:io'; |
7 | 7 |
8 import 'package:front_end/src/scanner/token.dart' show Token; | 8 import 'package:front_end/src/scanner/token.dart' show Token; |
9 import 'package:kernel/ast.dart'; | 9 import 'package:kernel/ast.dart'; |
10 import 'package:kernel/binary/ast_to_binary.dart'; | 10 import 'package:kernel/binary/ast_to_binary.dart'; |
11 import 'package:kernel/text/ast_to_text.dart'; | 11 import 'package:kernel/text/ast_to_text.dart'; |
12 | 12 |
13 /// A null-aware alternative to `token.offset`. If [token] is `null`, returns | 13 /// A null-aware alternative to `token.offset`. If [token] is `null`, returns |
14 /// `TreeNode.noOffset`. | 14 /// `TreeNode.noOffset`. |
15 int offsetForToken(Token token) => | 15 int offsetForToken(Token token) => |
16 token == null ? TreeNode.noOffset : token.offset; | 16 token == null ? TreeNode.noOffset : token.offset; |
17 | 17 |
18 /// Print the given [program]. Do nothing if it is `null`. | 18 /// Print the given [program]. Do nothing if it is `null`. If the |
19 void printProgramText(Program program) { | 19 /// [libraryFilter] is provided, then only libraries that satisfy it are |
| 20 /// printed. |
| 21 void printProgramText(Program program, {bool libraryFilter(Library library)}) { |
20 if (program == null) return; | 22 if (program == null) return; |
21 StringBuffer sb = new StringBuffer(); | 23 StringBuffer sb = new StringBuffer(); |
22 for (Library library in program.libraries) { | 24 for (Library library in program.libraries) { |
| 25 if (libraryFilter != null && !libraryFilter(library)) continue; |
23 Printer printer = new Printer(sb); | 26 Printer printer = new Printer(sb); |
24 printer.writeLibraryFile(library); | 27 printer.writeLibraryFile(library); |
25 } | 28 } |
26 print(sb); | 29 print(sb); |
27 } | 30 } |
28 | 31 |
29 Future<Null> writeProgramToFile(Program program, Uri uri) async { | 32 Future<Null> writeProgramToFile(Program program, Uri uri) async { |
30 File output = new File.fromUri(uri); | 33 File output = new File.fromUri(uri); |
31 IOSink sink = output.openWrite(); | 34 IOSink sink = output.openWrite(); |
32 try { | 35 try { |
33 new BinaryPrinter(sink).writeProgramFile(program); | 36 new BinaryPrinter(sink).writeProgramFile(program); |
34 program.unbindCanonicalNames(); | 37 program.unbindCanonicalNames(); |
35 } finally { | 38 } finally { |
36 await sink.close(); | 39 await sink.close(); |
37 } | 40 } |
38 } | 41 } |
OLD | NEW |