Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 class DartBackend extends Backend { | 5 class DartBackend extends Backend { |
| 6 final List<CompilerTask> tasks; | 6 final List<CompilerTask> tasks; |
| 7 | 7 |
| 8 Map<Element, TreeElements> get resolvedElements() => | 8 Map<Element, TreeElements> get resolvedElements() => |
| 9 compiler.enqueuer.resolution.resolvedElements; | 9 compiler.enqueuer.resolution.resolvedElements; |
| 10 | 10 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 topLevelElements.forEach(makePlaceholders); | 99 topLevelElements.forEach(makePlaceholders); |
| 100 | 100 |
| 101 // Create renames. | 101 // Create renames. |
| 102 Map<Node, String> renames = new Map<Node, String>(); | 102 Map<Node, String> renames = new Map<Node, String>(); |
| 103 Map<LibraryElement, String> imports = new Map<LibraryElement, String>(); | 103 Map<LibraryElement, String> imports = new Map<LibraryElement, String>(); |
| 104 renamePlaceholders(compiler, collector, renames, imports); | 104 renamePlaceholders(compiler, collector, renames, imports); |
| 105 | 105 |
| 106 // Sort elements. | 106 // Sort elements. |
| 107 compareElements(e0, e1) { | 107 final sortedTopLevels = sortElements(topLevelElements); |
| 108 compareBy(x, y, f) => f(x).compareTo(f(y)); | |
| 109 int result = compareBy(e0, e1, (e) => e.getLibrary().uri.toString()); | |
| 110 if (result != 0) return result; | |
| 111 return compareBy(e0, e1, (e) => e.position().charOffset); | |
| 112 } | |
| 113 | |
| 114 final sortedTopLevels = new List<Element>.from(topLevelElements); | |
| 115 sortedTopLevels.sort(compareElements); | |
| 116 | |
| 117 final sortedClassMembers = new Map<ClassElement, List<Element>>(); | 108 final sortedClassMembers = new Map<ClassElement, List<Element>>(); |
| 118 classMembers.forEach((classElement, members) { | 109 classMembers.forEach((classElement, members) { |
| 119 final sortedMembers = new List<Element>.from(members); | 110 sortedClassMembers[classElement] = sortElements(members); |
| 120 sortedMembers.sort(compareElements); | |
| 121 sortedClassMembers[classElement] = sortedMembers; | |
| 122 }); | 111 }); |
| 123 | 112 |
| 124 final unparser = new Unparser.withRenamer((Node node) => renames[node]); | 113 final unparser = new Unparser.withRenamer((Node node) => renames[node]); |
| 125 compiler.assembledCode = emitCode( | 114 compiler.assembledCode = emitCode( |
| 126 compiler, unparser, imports, sortedTopLevels, sortedClassMembers); | 115 compiler, unparser, imports, sortedTopLevels, sortedClassMembers); |
| 127 } | 116 } |
| 128 | 117 |
| 129 log(String message) => compiler.log('[DartBackend] $message'); | 118 log(String message) => compiler.log('[DartBackend] $message'); |
| 130 } | 119 } |
| 131 | 120 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 184 if (typeElement.isClass()) newClassElementCallback(typeElement); | 173 if (typeElement.isClass()) newClassElementCallback(typeElement); |
| 185 typeAnnotation.visitChildren(this); | 174 typeAnnotation.visitChildren(this); |
| 186 } | 175 } |
| 187 | 176 |
| 188 void collect() { | 177 void collect() { |
| 189 compiler.withCurrentElement(rootElement, () { | 178 compiler.withCurrentElement(rootElement, () { |
| 190 rootElement.parseNode(compiler).accept(this); | 179 rootElement.parseNode(compiler).accept(this); |
| 191 }); | 180 }); |
| 192 } | 181 } |
| 193 } | 182 } |
| 183 | |
| 184 compareBy(f) => (x, y) => f(x).compareTo(f(y)); | |
| 185 | |
| 186 List sorted(List l, comparison) { | |
|
Roman
2012/08/21 12:37:39
'sortList'?
Anton Muhin
2012/08/21 12:57:42
sorted matches nicely Python, mind if I keep it th
| |
| 187 final result = new List.from(l); | |
| 188 result.sort(comparison); | |
| 189 return result; | |
| 190 } | |
| 191 | |
| 192 List<Element> sortElements(Collection<Element> elements) { | |
| 193 compareElements(e0, e1) { | |
| 194 int result = compareBy((e) => e.getLibrary().uri.toString())(e0, e1); | |
| 195 if (result != 0) return result; | |
| 196 return compareBy((e) => e.position().charOffset)(e0, e1); | |
| 197 } | |
| 198 | |
| 199 return sorted(elements, compareElements); | |
| 200 } | |
| OLD | NEW |