| OLD | NEW |
| 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 Loading... |
| 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 } |
| OLD | NEW |