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 * Names are generated through three stages: | 10 * Names are generated through three stages: |
(...skipping 1717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1728 } else { | 1728 } else { |
1729 // Using some bits from the keys hash tag groups the names Maps with the | 1729 // Using some bits from the keys hash tag groups the names Maps with the |
1730 // same structure. | 1730 // same structure. |
1731 add(getHashTag(constant.keyList, 2) + getHashTag(constant, 3)); | 1731 add(getHashTag(constant.keyList, 2) + getHashTag(constant, 3)); |
1732 } | 1732 } |
1733 } | 1733 } |
1734 | 1734 |
1735 @override | 1735 @override |
1736 void visitConstructed(ConstructedConstantValue constant, [_]) { | 1736 void visitConstructed(ConstructedConstantValue constant, [_]) { |
1737 addRoot(constant.type.element.name); | 1737 addRoot(constant.type.element.name); |
1738 for (ConstantValue value in constant.fields.values) { | 1738 constant.type.element.forEachInstanceField((_, FieldElement field) { |
1739 _visit(value); | |
1740 if (failed) return; | 1739 if (failed) return; |
1741 } | 1740 _visit(constant.fields[field]); |
| 1741 }, includeSuperAndInjectedMembers: true); |
1742 } | 1742 } |
1743 | 1743 |
1744 @override | 1744 @override |
1745 void visitType(TypeConstantValue constant, [_]) { | 1745 void visitType(TypeConstantValue constant, [_]) { |
1746 // Generates something like 'Type_String_k8F', using the simple name of the | 1746 // Generates something like 'Type_String_k8F', using the simple name of the |
1747 // type and a hash to disambiguate the same name in different libraries. | 1747 // type and a hash to disambiguate the same name in different libraries. |
1748 addRoot('Type'); | 1748 addRoot('Type'); |
1749 DartType type = constant.representedType; | 1749 DartType type = constant.representedType; |
1750 String name = type.element?.name; | 1750 String name = type.element?.name; |
1751 if (name == null) { | 1751 if (name == null) { |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1855 | 1855 |
1856 @override | 1856 @override |
1857 int visitMap(MapConstantValue constant, [_]) { | 1857 int visitMap(MapConstantValue constant, [_]) { |
1858 int hash = _hashList(constant.length, constant.keys); | 1858 int hash = _hashList(constant.length, constant.keys); |
1859 return _hashList(hash, constant.values); | 1859 return _hashList(hash, constant.values); |
1860 } | 1860 } |
1861 | 1861 |
1862 @override | 1862 @override |
1863 int visitConstructed(ConstructedConstantValue constant, [_]) { | 1863 int visitConstructed(ConstructedConstantValue constant, [_]) { |
1864 int hash = _hashString(3, constant.type.element.name); | 1864 int hash = _hashString(3, constant.type.element.name); |
1865 for (ConstantValue value in constant.fields.values) { | 1865 constant.type.element.forEachInstanceField((_, FieldElement field) { |
1866 hash = _combine(hash, _visit(value)); | 1866 hash = _combine(hash, _visit(constant.fields[field])); |
1867 } | 1867 }, includeSuperAndInjectedMembers: true); |
1868 return hash; | 1868 return hash; |
1869 } | 1869 } |
1870 | 1870 |
1871 @override | 1871 @override |
1872 int visitType(TypeConstantValue constant, [_]) { | 1872 int visitType(TypeConstantValue constant, [_]) { |
1873 DartType type = constant.representedType; | 1873 DartType type = constant.representedType; |
1874 JavaScriptBackend backend = compiler.backend; | 1874 JavaScriptBackend backend = compiler.backend; |
1875 // This name includes the library name and type parameters. | 1875 // This name includes the library name and type parameters. |
1876 String name = backend.rtiEncoder.getTypeRepresentationForTypeConstant(type); | 1876 String name = backend.rtiEncoder.getTypeRepresentationForTypeConstant(type); |
1877 return _hashString(4, name); | 1877 return _hashString(4, name); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2054 void addSuggestion(String original, String suggestion) { | 2054 void addSuggestion(String original, String suggestion) { |
2055 assert(!_suggestedNames.containsKey(original)); | 2055 assert(!_suggestedNames.containsKey(original)); |
2056 _suggestedNames[original] = suggestion; | 2056 _suggestedNames[original] = suggestion; |
2057 } | 2057 } |
2058 | 2058 |
2059 bool hasSuggestion(String original) => _suggestedNames.containsKey(original); | 2059 bool hasSuggestion(String original) => _suggestedNames.containsKey(original); |
2060 bool isSuggestion(String candidate) { | 2060 bool isSuggestion(String candidate) { |
2061 return _suggestedNames.containsValue(candidate); | 2061 return _suggestedNames.containsValue(candidate); |
2062 } | 2062 } |
2063 } | 2063 } |
OLD | NEW |