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

Side by Side Diff: pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart

Issue 3011803002: dart2js kernel: Sort constants
Patch Set: implement DartType ordering Created 3 years, 3 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
OLDNEW
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 library dart2js.kernel.backend_strategy; 5 library dart2js.kernel.backend_strategy;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import '../backend_strategy.dart'; 9 import '../backend_strategy.dart';
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 entity1, sourceSpan1.begin, null, entity2, sourceSpan2.begin, null); 215 entity1, sourceSpan1.begin, null, entity2, sourceSpan2.begin, null);
216 } 216 }
217 217
218 @override 218 @override
219 Iterable<LibraryEntity> sortLibraries(Iterable<LibraryEntity> libraries) { 219 Iterable<LibraryEntity> sortLibraries(Iterable<LibraryEntity> libraries) {
220 return libraries.toList()..sort(_compareLibraries); 220 return libraries.toList()..sort(_compareLibraries);
221 } 221 }
222 222
223 @override 223 @override
224 Iterable<MemberEntity> sortMembers(Iterable<MemberEntity> members) { 224 Iterable<MemberEntity> sortMembers(Iterable<MemberEntity> members) {
225 return members.toList() 225 return members.toList()..sort(compareMembersByLocation);
226 ..sort((MemberEntity member1, MemberEntity member2) {
227 int r = _compareLibraries(member1.library, member2.library);
228 if (r != 0) return r;
229 MemberDefinition definition1 = elementMap.getMemberDefinition(member1);
230 MemberDefinition definition2 = elementMap.getMemberDefinition(member2);
231 return _compareSourceSpans(
232 member1, definition1.location, member2, definition2.location);
233 });
234 } 226 }
235 227
236 @override 228 @override
237 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { 229 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) {
238 int compareClasses(ClassEntity cls1, ClassEntity cls2) {
239 int r = _compareLibraries(cls1.library, cls2.library);
240 if (r != 0) return r;
241 ClassDefinition definition1 = elementMap.getClassDefinition(cls1);
242 ClassDefinition definition2 = elementMap.getClassDefinition(cls2);
243 return _compareSourceSpans(
244 cls1, definition1.location, cls2, definition2.location);
245 }
246
247 List<ClassEntity> regularClasses = <ClassEntity>[]; 230 List<ClassEntity> regularClasses = <ClassEntity>[];
248 List<ClassEntity> unnamedMixins = <ClassEntity>[]; 231 List<ClassEntity> unnamedMixins = <ClassEntity>[];
249 for (ClassEntity cls in classes) { 232 for (ClassEntity cls in classes) {
250 if (elementMap.elementEnvironment.isUnnamedMixinApplication(cls)) { 233 if (elementMap.elementEnvironment.isUnnamedMixinApplication(cls)) {
251 unnamedMixins.add(cls); 234 unnamedMixins.add(cls);
252 } else { 235 } else {
253 regularClasses.add(cls); 236 regularClasses.add(cls);
254 } 237 }
255 } 238 }
256 List<ClassEntity> sorted = <ClassEntity>[]; 239 List<ClassEntity> sorted = <ClassEntity>[];
257 regularClasses.sort(compareClasses); 240 regularClasses.sort(compareClassesByLocation);
258 sorted.addAll(regularClasses); 241 sorted.addAll(regularClasses);
259 unnamedMixins.sort((a, b) { 242 unnamedMixins.sort((a, b) {
260 int result = _compareLibraries(a.library, b.library); 243 int result = _compareLibraries(a.library, b.library);
261 if (result != 0) return result; 244 if (result != 0) return result;
262 result = a.name.compareTo(b.name); 245 result = a.name.compareTo(b.name);
263 assert(result != 0, 246 assert(result != 0,
264 failedAt(a, "Multiple mixins named ${a.name}: $a vs $b.")); 247 failedAt(a, "Multiple mixins named ${a.name}: $a vs $b."));
265 return result; 248 return result;
266 }); 249 });
267 sorted.addAll(unnamedMixins); 250 sorted.addAll(unnamedMixins);
268 return sorted; 251 return sorted;
269 } 252 }
270 253
271 @override 254 @override
272 Iterable<TypedefEntity> sortTypedefs(Iterable<TypedefEntity> typedefs) { 255 Iterable<TypedefEntity> sortTypedefs(Iterable<TypedefEntity> typedefs) {
273 // TODO(redemption): Support this. 256 // TODO(redemption): Support this.
274 assert(typedefs.isEmpty); 257 assert(typedefs.isEmpty);
275 return typedefs; 258 return typedefs;
276 } 259 }
260
261 @override
262 int compareLibrariesByLocation(LibraryEntity a, LibraryEntity b) {
263 return _compareLibraries(a, b);
264 }
265
266 @override
267 int compareClassesByLocation(ClassEntity a, ClassEntity b) {
268 int r = _compareLibraries(a.library, b.library);
269 if (r != 0) return r;
270 ClassDefinition definition1 = elementMap.getClassDefinition(a);
271 ClassDefinition definition2 = elementMap.getClassDefinition(b);
272 return _compareSourceSpans(
273 a, definition1.location, b, definition2.location);
274 }
275
276 @override
277 int compareTypedefsByLocation(TypedefEntity a, TypedefEntity b) {
278 // TODO(redemption): Support this.
279 failedAt(a, 'KernelSorter.compareTypedefsByLocation unimplemented');
280 return 0;
281 }
282
283 @override
284 int compareMembersByLocation(MemberEntity a, MemberEntity b) {
285 int r = _compareLibraries(a.library, b.library);
286 if (r != 0) return r;
287 MemberDefinition definition1 = elementMap.getMemberDefinition(a);
288 MemberDefinition definition2 = elementMap.getMemberDefinition(b);
289 return _compareSourceSpans(
290 a, definition1.location, b, definition2.location);
291 }
277 } 292 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698