OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 js_backend; | 5 part of js_backend; |
6 | 6 |
7 /** | 7 /** |
8 * Assigns JavaScript identifiers to Dart variables, class-names and members. | 8 * Assigns JavaScript identifiers to Dart variables, class-names and members. |
9 */ | 9 */ |
10 class Namer implements ClosureNamer { | 10 class Namer implements ClosureNamer { |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 } | 532 } |
533 | 533 |
534 String getInterceptorName(Element element, Collection<ClassElement> classes) { | 534 String getInterceptorName(Element element, Collection<ClassElement> classes) { |
535 if (classes.contains(compiler.objectClass)) { | 535 if (classes.contains(compiler.objectClass)) { |
536 // If the object class is in the set of intercepted classes, we | 536 // If the object class is in the set of intercepted classes, we |
537 // need to go through the generic getInterceptorMethod. | 537 // need to go through the generic getInterceptorMethod. |
538 return getName(element); | 538 return getName(element); |
539 } | 539 } |
540 // Use the unminified names here to construct the interceptor names. This | 540 // Use the unminified names here to construct the interceptor names. This |
541 // helps ensure that they don't all suddenly change names due to a name | 541 // helps ensure that they don't all suddenly change names due to a name |
542 // clash in the minifier, which would affect the diff size. | 542 // clash in the minifier, which would affect the diff size. Sort the names |
| 543 // of the classes to ensure name is stable and predicatble for the suggested |
| 544 // names. |
543 StringBuffer buffer = new StringBuffer('${element.name.slowToString()}\$'); | 545 StringBuffer buffer = new StringBuffer('${element.name.slowToString()}\$'); |
544 for (ClassElement cls in classes) { | 546 List<String> names = classes.map((cls) => cls.name.slowToString()).toList(); |
545 buffer.add(cls.name.slowToString()); | 547 names.sort(); |
546 } | 548 names.forEach(buffer.add); |
547 return getMappedGlobalName(buffer.toString()); | 549 return getMappedGlobalName(buffer.toString()); |
548 } | 550 } |
549 | 551 |
550 String getBailoutName(Element element) { | 552 String getBailoutName(Element element) { |
551 String name = bailoutNames[element]; | 553 String name = bailoutNames[element]; |
552 if (name != null) return name; | 554 if (name != null) return name; |
553 bool global = !element.isInstanceMember(); | 555 bool global = !element.isInstanceMember(); |
554 // Despite the name of the variable, this gets the minified name when we | 556 // Despite the name of the variable, this gets the minified name when we |
555 // are minifying, but it doesn't really make much difference. The | 557 // are minifying, but it doesn't really make much difference. The |
556 // important thing is that it is a unique name. We add $bailout and, if we | 558 // important thing is that it is a unique name. We add $bailout and, if we |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 return const SourceString(r'$or'); | 753 return const SourceString(r'$or'); |
752 } else if (value == '-') { | 754 } else if (value == '-') { |
753 return const SourceString(r'$sub'); | 755 return const SourceString(r'$sub'); |
754 } else if (value == 'unary-') { | 756 } else if (value == 'unary-') { |
755 return const SourceString(r'$negate'); | 757 return const SourceString(r'$negate'); |
756 } else { | 758 } else { |
757 return name; | 759 return name; |
758 } | 760 } |
759 } | 761 } |
760 } | 762 } |
OLD | NEW |