Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Side by Side Diff: lib/compiler/implementation/dart_backend/backend.dart

Issue 10834416: Rename elements after sorting. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 List<Element> sortElements(Collection<Element> elements) {
185 compareElements(e0, e1) {
186 compareBy(x, y, f) => f(x).compareTo(f(y));
187 int result = compareBy(e0, e1, (e) => e.getLibrary().uri.toString());
188 if (result != 0) return result;
189 return compareBy(e0, e1, (e) => e.position().charOffset);
190 }
191
192 final sorted = new List<Element>.from(elements);
193 sorted.sort(compareElements);
194 return sorted;
195 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698