OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 js; | 5 library js; |
6 | 6 |
7 import 'package:js_ast/js_ast.dart'; | 7 import 'package:js_ast/js_ast.dart'; |
8 export 'package:js_ast/js_ast.dart'; | 8 export 'package:js_ast/js_ast.dart'; |
9 | 9 |
10 import '../io/code_output.dart' show CodeOutput, CodeBuffer; | 10 import '../compiler.dart' show |
11 import '../js_emitter/js_emitter.dart' show USE_LAZY_EMITTER; | 11 Compiler; |
12 import '../dart2jslib.dart' as leg; | 12 import '../diagnostics/spannable.dart' show |
13 import '../util/util.dart' show NO_LOCATION_SPANNABLE, Indentation, Tagging; | 13 NO_LOCATION_SPANNABLE; |
14 import '../dump_info.dart' show DumpInfoTask; | 14 import '../dump_info.dart' show |
| 15 DumpInfoTask; |
| 16 import '../io/code_output.dart' show |
| 17 CodeBuffer, |
| 18 CodeOutput; |
| 19 import '../js_emitter/js_emitter.dart' show |
| 20 USE_LAZY_EMITTER; |
| 21 |
15 import 'js_source_mapping.dart'; | 22 import 'js_source_mapping.dart'; |
16 | 23 |
17 CodeBuffer prettyPrint(Node node, | 24 CodeBuffer prettyPrint(Node node, |
18 leg.Compiler compiler, | 25 Compiler compiler, |
19 {DumpInfoTask monitor, | 26 {DumpInfoTask monitor, |
20 bool allowVariableMinification: true, | 27 bool allowVariableMinification: true, |
21 Renamer renamerForNames: | 28 Renamer renamerForNames: |
22 JavaScriptPrintingOptions.identityRenamer}) { | 29 JavaScriptPrintingOptions.identityRenamer}) { |
23 JavaScriptSourceInformationStrategy sourceInformationFactory = | 30 JavaScriptSourceInformationStrategy sourceInformationFactory = |
24 compiler.backend.sourceInformationStrategy; | 31 compiler.backend.sourceInformationStrategy; |
25 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions( | 32 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions( |
26 shouldCompressOutput: compiler.enableMinification, | 33 shouldCompressOutput: compiler.enableMinification, |
27 minifyLocalVariables: allowVariableMinification, | 34 minifyLocalVariables: allowVariableMinification, |
28 preferSemicolonToNewlineInMinifiedOutput: USE_LAZY_EMITTER, | 35 preferSemicolonToNewlineInMinifiedOutput: USE_LAZY_EMITTER, |
29 renamerForNames: renamerForNames); | 36 renamerForNames: renamerForNames); |
30 CodeBuffer outBuffer = new CodeBuffer(); | 37 CodeBuffer outBuffer = new CodeBuffer(); |
31 SourceInformationProcessor sourceInformationProcessor = | 38 SourceInformationProcessor sourceInformationProcessor = |
32 sourceInformationFactory.createProcessor( | 39 sourceInformationFactory.createProcessor( |
33 new SourceLocationsMapper(outBuffer)); | 40 new SourceLocationsMapper(outBuffer)); |
34 Dart2JSJavaScriptPrintingContext context = | 41 Dart2JSJavaScriptPrintingContext context = |
35 new Dart2JSJavaScriptPrintingContext( | 42 new Dart2JSJavaScriptPrintingContext( |
36 compiler, monitor, outBuffer, sourceInformationProcessor); | 43 compiler, monitor, outBuffer, sourceInformationProcessor); |
37 Printer printer = new Printer(options, context); | 44 Printer printer = new Printer(options, context); |
38 printer.visit(node); | 45 printer.visit(node); |
39 sourceInformationProcessor.process(node); | 46 sourceInformationProcessor.process(node); |
40 return outBuffer; | 47 return outBuffer; |
41 } | 48 } |
42 | 49 |
43 class Dart2JSJavaScriptPrintingContext implements JavaScriptPrintingContext { | 50 class Dart2JSJavaScriptPrintingContext implements JavaScriptPrintingContext { |
44 final leg.Compiler compiler; | 51 final Compiler compiler; |
45 final DumpInfoTask monitor; | 52 final DumpInfoTask monitor; |
46 final CodeBuffer outBuffer; | 53 final CodeBuffer outBuffer; |
47 final CodePositionListener codePositionListener; | 54 final CodePositionListener codePositionListener; |
48 | 55 |
49 Dart2JSJavaScriptPrintingContext( | 56 Dart2JSJavaScriptPrintingContext( |
50 this.compiler, | 57 this.compiler, |
51 this.monitor, | 58 this.monitor, |
52 this.outBuffer, | 59 this.outBuffer, |
53 this.codePositionListener); | 60 this.codePositionListener); |
54 | 61 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 /// Represents the LiteralString resulting from unparsing [expression]. The | 122 /// Represents the LiteralString resulting from unparsing [expression]. The |
116 /// actual unparsing is done on demand when requesting the [value] of this | 123 /// actual unparsing is done on demand when requesting the [value] of this |
117 /// node. | 124 /// node. |
118 /// | 125 /// |
119 /// This is used when generated code needs to be represented as a string, | 126 /// This is used when generated code needs to be represented as a string, |
120 /// for example by the lazy emitter or when generating code generators. | 127 /// for example by the lazy emitter or when generating code generators. |
121 class UnparsedNode extends DeferredString | 128 class UnparsedNode extends DeferredString |
122 implements AstContainer { | 129 implements AstContainer { |
123 @override | 130 @override |
124 final Node tree; | 131 final Node tree; |
125 final leg.Compiler _compiler; | 132 final Compiler _compiler; |
126 final bool _protectForEval; | 133 final bool _protectForEval; |
127 LiteralString _cachedLiteral; | 134 LiteralString _cachedLiteral; |
128 | 135 |
129 Iterable<Node> get containedNodes => [tree]; | 136 Iterable<Node> get containedNodes => [tree]; |
130 | 137 |
131 /// A [js.Literal] that represents the string result of unparsing [ast]. | 138 /// A [js.Literal] that represents the string result of unparsing [ast]. |
132 /// | 139 /// |
133 /// When its string [value] is requested, the node pretty-prints the given | 140 /// When its string [value] is requested, the node pretty-prints the given |
134 /// [ast] and, if [protectForEval] is true, wraps the resulting | 141 /// [ast] and, if [protectForEval] is true, wraps the resulting |
135 /// string in parenthesis. The result is also escaped. | 142 /// string in parenthesis. The result is also escaped. |
(...skipping 14 matching lines...) Expand all Loading... |
150 } | 157 } |
151 } | 158 } |
152 _cachedLiteral = js.escapedString(text); | 159 _cachedLiteral = js.escapedString(text); |
153 } | 160 } |
154 return _cachedLiteral; | 161 return _cachedLiteral; |
155 } | 162 } |
156 | 163 |
157 @override | 164 @override |
158 String get value => _literal.value; | 165 String get value => _literal.value; |
159 } | 166 } |
OLD | NEW |