OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 part of dart_backend; | 5 part of dart_backend; |
6 | 6 |
7 typedef bool IsSafeToRemoveTypeDeclarations( | 7 typedef bool IsSafeToRemoveTypeDeclarations( |
8 Map<ClassElement, Iterable<Element>> classMembers); | 8 Map<ClassElement, Iterable<Element>> classMembers); |
9 typedef void ElementCallback<E>(E element); | 9 typedef void ElementCallback<E>(E element); |
10 typedef void ElementPostProcessFunction( | 10 typedef void ElementPostProcessFunction( |
11 AstElement element, ElementAst elementAst, | 11 AstElement element, ElementAst elementAst, |
12 ElementCallback<TypedefElement> typedefCallback, | 12 ElementCallback<TypedefElement> typedefCallback, |
13 ElementCallback<ClassElement> classCallback); | 13 ElementCallback<ClassElement> classCallback); |
14 typedef ElementAst ComputeElementAstFunction(AstElement element); | 14 typedef ElementAst ComputeElementAstFunction(AstElement element); |
15 typedef bool ElementFilter(Element element); | 15 typedef bool ElementFilter(Element element); |
16 typedef List<Element> ElementSorter(Iterable<Element> elements); | 16 typedef List<Element> ElementSorter(Iterable<Element> elements); |
17 | 17 |
18 /// Output engine for dart2dart that is shared between the dart2js and the | 18 /// Output engine for dart2dart that is shared between the dart2js and the |
19 /// analyzer implementations of dart2dart. | 19 /// analyzer implementations of dart2dart. |
20 class DartOutputter { | 20 class DartOutputter { |
21 final DiagnosticListener listener; | 21 final DiagnosticReporter listener; |
sigurdm
2015/10/05 13:45:34
Rename variable? (several occurences in this file)
Johnni Winther
2015/10/06 08:04:32
Done.
| |
22 final CompilerOutputProvider outputProvider; | 22 final CompilerOutputProvider outputProvider; |
23 final bool forceStripTypes; | 23 final bool forceStripTypes; |
24 | 24 |
25 // TODO(antonm): make available from command-line options. | 25 // TODO(antonm): make available from command-line options. |
26 final bool outputAst = false; | 26 final bool outputAst = false; |
27 final bool enableMinification; | 27 final bool enableMinification; |
28 | 28 |
29 /// If `true`, libraries are generated into separate files. | 29 /// If `true`, libraries are generated into separate files. |
30 final bool multiFile; | 30 final bool multiFile; |
31 | 31 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
140 outputUri, | 140 outputUri, |
141 outputProvider, | 141 outputProvider, |
142 mirrorRenamer, | 142 mirrorRenamer, |
143 multiFile: multiFile, | 143 multiFile: multiFile, |
144 forceStripTypes: forceStripTypes, | 144 forceStripTypes: forceStripTypes, |
145 enableMinification: enableMinification); | 145 enableMinification: enableMinification); |
146 } | 146 } |
147 } | 147 } |
148 | 148 |
149 static PlaceholderCollector collectPlaceholders( | 149 static PlaceholderCollector collectPlaceholders( |
150 DiagnosticListener listener, | 150 DiagnosticReporter listener, |
151 MirrorRenamer mirrorRenamer, | 151 MirrorRenamer mirrorRenamer, |
152 FunctionElement mainFunction, | 152 FunctionElement mainFunction, |
153 LibraryInfo libraryInfo, | 153 LibraryInfo libraryInfo, |
154 ElementInfo elementInfo) { | 154 ElementInfo elementInfo) { |
155 // Create all necessary placeholders. | 155 // Create all necessary placeholders. |
156 PlaceholderCollector collector = new PlaceholderCollector( | 156 PlaceholderCollector collector = new PlaceholderCollector( |
157 listener, | 157 listener, |
158 mirrorRenamer, | 158 mirrorRenamer, |
159 libraryInfo.fixedDynamicNames, | 159 libraryInfo.fixedDynamicNames, |
160 elementInfo.elementAsts, | 160 elementInfo.elementAsts, |
(...skipping 26 matching lines...) Expand all Loading... | |
187 libraryInfo.fixedDynamicNames, | 187 libraryInfo.fixedDynamicNames, |
188 libraryInfo.fixedStaticNames, | 188 libraryInfo.fixedStaticNames, |
189 libraryInfo.reexportingLibraries, | 189 libraryInfo.reexportingLibraries, |
190 cutDeclarationTypes: shouldCutDeclarationTypes, | 190 cutDeclarationTypes: shouldCutDeclarationTypes, |
191 enableMinification: enableMinification); | 191 enableMinification: enableMinification); |
192 | 192 |
193 placeholderRenamer.computeRenames(collector); | 193 placeholderRenamer.computeRenames(collector); |
194 return placeholderRenamer; | 194 return placeholderRenamer; |
195 } | 195 } |
196 | 196 |
197 static String astOutput(DiagnosticListener listener, | 197 static String astOutput(DiagnosticReporter listener, |
198 ElementInfo elementInfo) { | 198 ElementInfo elementInfo) { |
199 // TODO(antonm): Ideally XML should be a separate backend. | 199 // TODO(antonm): Ideally XML should be a separate backend. |
200 // TODO(antonm): obey renames and minification, at least as an option. | 200 // TODO(antonm): obey renames and minification, at least as an option. |
201 StringBuffer sb = new StringBuffer(); | 201 StringBuffer sb = new StringBuffer(); |
202 outputElement(element) { | 202 outputElement(element) { |
203 sb.write(element.parseNode(listener).toDebugString()); | 203 sb.write(element.parseNode(listener).toDebugString()); |
204 } | 204 } |
205 | 205 |
206 // Emit XML for AST instead of the program. | 206 // Emit XML for AST instead of the program. |
207 for (Element topLevel in elementInfo.topLevelElements) { | 207 for (Element topLevel in elementInfo.topLevelElements) { |
(...skipping 14 matching lines...) Expand all Loading... | |
222 final Set<String> fixedDynamicNames; | 222 final Set<String> fixedDynamicNames; |
223 final Map<Element, LibraryElement> reexportingLibraries; | 223 final Map<Element, LibraryElement> reexportingLibraries; |
224 final List<LibraryElement> userLibraries; | 224 final List<LibraryElement> userLibraries; |
225 | 225 |
226 LibraryInfo(this.fixedStaticNames, | 226 LibraryInfo(this.fixedStaticNames, |
227 this.fixedDynamicNames, | 227 this.fixedDynamicNames, |
228 this.reexportingLibraries, | 228 this.reexportingLibraries, |
229 this.userLibraries); | 229 this.userLibraries); |
230 | 230 |
231 static LibraryInfo processLibraries( | 231 static LibraryInfo processLibraries( |
232 DiagnosticListener listener, | 232 DiagnosticReporter reporter, |
233 Iterable<LibraryElement> libraries, | 233 Iterable<LibraryElement> libraries, |
234 Iterable<AstElement> resolvedElements) { | 234 Iterable<AstElement> resolvedElements) { |
235 Set<String> fixedStaticNames = new Set<String>(); | 235 Set<String> fixedStaticNames = new Set<String>(); |
236 Set<String> fixedDynamicNames = new Set<String>(); | 236 Set<String> fixedDynamicNames = new Set<String>(); |
237 Map<Element, LibraryElement> reexportingLibraries = | 237 Map<Element, LibraryElement> reexportingLibraries = |
238 <Element, LibraryElement>{}; | 238 <Element, LibraryElement>{}; |
239 List<LibraryElement> userLibraries = <LibraryElement>[]; | 239 List<LibraryElement> userLibraries = <LibraryElement>[]; |
240 // Conservatively traverse all platform libraries and collect member names. | 240 // Conservatively traverse all platform libraries and collect member names. |
241 // TODO(antonm): ideally we should only collect names of used members, | 241 // TODO(antonm): ideally we should only collect names of used members, |
242 // however as of today there are problems with names of some core library | 242 // however as of today there are problems with names of some core library |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
292 fixedDynamicNames.add(parameter.name); | 292 fixedDynamicNames.add(parameter.name); |
293 } | 293 } |
294 } | 294 } |
295 ClassElement cls = element.enclosingClass; | 295 ClassElement cls = element.enclosingClass; |
296 if (cls != null && cls.isEnumClass) { | 296 if (cls != null && cls.isEnumClass) { |
297 fixedDynamicNames.add('index'); | 297 fixedDynamicNames.add('index'); |
298 | 298 |
299 ClassElement existingEnumClass = | 299 ClassElement existingEnumClass = |
300 enumClassMap.putIfAbsent(cls.name, () => cls); | 300 enumClassMap.putIfAbsent(cls.name, () => cls); |
301 if (existingEnumClass != cls) { | 301 if (existingEnumClass != cls) { |
302 listener.reportError( | 302 reporter.reportError( |
303 listener.createMessage( | 303 reporter.createMessage( |
304 cls, | 304 cls, |
305 MessageKind.GENERIC, | 305 MessageKind.GENERIC, |
306 {'text': "Duplicate enum names are not supported " | 306 {'text': "Duplicate enum names are not supported " |
307 "in dart2dart."}), | 307 "in dart2dart."}), |
308 <DiagnosticMessage>[ | 308 <DiagnosticMessage>[ |
309 listener.createMessage( | 309 reporter.createMessage( |
310 existingEnumClass, | 310 existingEnumClass, |
311 MessageKind.GENERIC, | 311 MessageKind.GENERIC, |
312 {'text': "This is the other declaration of '${cls.name}'."}), | 312 {'text': "This is the other declaration of '${cls.name}'."}), |
313 ]); | 313 ]); |
314 } | 314 } |
315 } | 315 } |
316 } | 316 } |
317 | 317 |
318 fixedStaticNames.addAll(enumClassMap.keys); | 318 fixedStaticNames.addAll(enumClassMap.keys); |
319 | 319 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
596 outputProvider("", "dart") | 596 outputProvider("", "dart") |
597 ..add(code) | 597 ..add(code) |
598 ..close(); | 598 ..close(); |
599 | 599 |
600 totalSize = code.length; | 600 totalSize = code.length; |
601 } | 601 } |
602 | 602 |
603 return totalSize; | 603 return totalSize; |
604 } | 604 } |
605 } | 605 } |
OLD | NEW |