OLD | NEW |
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 Function get _compareNodes => | 5 Function get _compareNodes => |
6 compareBy((n) => n.getBeginToken().charOffset); | 6 compareBy((n) => n.getBeginToken().charOffset); |
7 | 7 |
8 typedef String _Renamer(Renamable renamable); | 8 typedef String _Renamer(Renamable renamable); |
9 abstract class Renamable { | 9 abstract class Renamable { |
10 const int RENAMABLE_TYPE_ELEMENT = 1; | 10 const int RENAMABLE_TYPE_ELEMENT = 1; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 final Map<LibraryElement, Map<String, String>> renamed | 69 final Map<LibraryElement, Map<String, String>> renamed |
70 = new Map<LibraryElement, Map<String, String>>(); | 70 = new Map<LibraryElement, Map<String, String>>(); |
71 | 71 |
72 renameNodes(Collection<Node> nodes, renamer) { | 72 renameNodes(Collection<Node> nodes, renamer) { |
73 for (Node node in sorted(nodes, _compareNodes)) { | 73 for (Node node in sorted(nodes, _compareNodes)) { |
74 renames[node] = renamer(node); | 74 renames[node] = renamer(node); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 sortedForEach(Map<Element, Dynamic> map, f) { | 78 sortedForEach(Map<Element, Dynamic> map, f) { |
79 for (Element element in sortElements(map.getKeys())) { | 79 for (Element element in sortElements(map.keys)) { |
80 f(element, map[element]); | 80 f(element, map[element]); |
81 } | 81 } |
82 } | 82 } |
83 | 83 |
84 Function makeElementRenamer(rename, generateUniqueName) => (element) { | 84 Function makeElementRenamer(rename, generateUniqueName) => (element) { |
85 assert(Elements.isStaticOrTopLevel(element) | 85 assert(Elements.isStaticOrTopLevel(element) |
86 || element is TypeVariableElement); | 86 || element is TypeVariableElement); |
87 // TODO(smok): We may want to reuse class static field and method names. | 87 // TODO(smok): We may want to reuse class static field and method names. |
88 String originalName = element.name.slowToString(); | 88 String originalName = element.name.slowToString(); |
89 LibraryElement library = element.getLibrary(); | 89 LibraryElement library = element.getLibrary(); |
(...skipping 15 matching lines...) Expand all Loading... |
105 | 105 |
106 // Renamer function that takes library and original name and returns a new | 106 // Renamer function that takes library and original name and returns a new |
107 // name for given identifier. | 107 // name for given identifier. |
108 Function rename; | 108 Function rename; |
109 // A function that takes original identifier name and generates a new unique | 109 // A function that takes original identifier name and generates a new unique |
110 // identifier. | 110 // identifier. |
111 Function generateUniqueName; | 111 Function generateUniqueName; |
112 if (compiler.enableMinification) { | 112 if (compiler.enableMinification) { |
113 MinifyingGenerator generator = new MinifyingGenerator(); | 113 MinifyingGenerator generator = new MinifyingGenerator(); |
114 Set<String> forbiddenIdentifiers = new Set<String>.from(['main']); | 114 Set<String> forbiddenIdentifiers = new Set<String>.from(['main']); |
115 forbiddenIdentifiers.addAll(Keyword.keywords.getKeys()); | 115 forbiddenIdentifiers.addAll(Keyword.keywords.keys); |
116 forbiddenIdentifiers.addAll(fixedMemberNames); | 116 forbiddenIdentifiers.addAll(fixedMemberNames); |
117 generateUniqueName = (_) => | 117 generateUniqueName = (_) => |
118 generator.generate(forbiddenIdentifiers.contains); | 118 generator.generate(forbiddenIdentifiers.contains); |
119 rename = makeRenamer(generateUniqueName); | 119 rename = makeRenamer(generateUniqueName); |
120 Function renameElement = makeElementRenamer(rename, generateUniqueName); | 120 Function renameElement = makeElementRenamer(rename, generateUniqueName); |
121 | 121 |
122 Set<String> allParameterIdentifiers = new Set<String>(); | 122 Set<String> allParameterIdentifiers = new Set<String>(); |
123 for (var functionScope in placeholderCollector.functionScopes.getValues()) { | 123 for (var functionScope in placeholderCollector.functionScopes.values) { |
124 allParameterIdentifiers.addAll(functionScope.parameterIdentifiers); | 124 allParameterIdentifiers.addAll(functionScope.parameterIdentifiers); |
125 } | 125 } |
126 // Build a sorted (by usage) list of local nodes that will be renamed to | 126 // Build a sorted (by usage) list of local nodes that will be renamed to |
127 // the same identifier. So the top-used local variables in all functions | 127 // the same identifier. So the top-used local variables in all functions |
128 // will be renamed first and will all share the same new identifier. | 128 // will be renamed first and will all share the same new identifier. |
129 List<Set<Node>> allSortedLocals = new List<Set<Node>>(); | 129 List<Set<Node>> allSortedLocals = new List<Set<Node>>(); |
130 for (var functionScope in placeholderCollector.functionScopes.getValues()) { | 130 for (var functionScope in placeholderCollector.functionScopes.values) { |
131 // Add current sorted local identifiers to the whole sorted list | 131 // Add current sorted local identifiers to the whole sorted list |
132 // of all local identifiers for all functions. | 132 // of all local identifiers for all functions. |
133 List<LocalPlaceholder> currentSortedPlaceholders = | 133 List<LocalPlaceholder> currentSortedPlaceholders = |
134 sorted(functionScope.localPlaceholders, | 134 sorted(functionScope.localPlaceholders, |
135 compareBy((LocalPlaceholder ph) => -ph.nodes.length)); | 135 compareBy((LocalPlaceholder ph) => -ph.nodes.length)); |
136 List<Set<Node>> currentSortedNodes = | 136 List<Set<Node>> currentSortedNodes = |
137 currentSortedPlaceholders.map((ph) => ph.nodes); | 137 currentSortedPlaceholders.map((ph) => ph.nodes); |
138 // Make room in all sorted locals list for new stuff. | 138 // Make room in all sorted locals list for new stuff. |
139 while (currentSortedNodes.length > allSortedLocals.length) { | 139 while (currentSortedNodes.length > allSortedLocals.length) { |
140 allSortedLocals.add(new Set<Node>()); | 140 allSortedLocals.add(new Set<Node>()); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 index ~/= firstCharAlphabet.length; | 285 index ~/= firstCharAlphabet.length; |
286 int length = otherCharsAlphabet.length; | 286 int length = otherCharsAlphabet.length; |
287 while (index >= length) { | 287 while (index >= length) { |
288 resultBuilder.add(otherCharsAlphabet[index % length]); | 288 resultBuilder.add(otherCharsAlphabet[index % length]); |
289 index ~/= length; | 289 index ~/= length; |
290 } | 290 } |
291 resultBuilder.add(otherCharsAlphabet[index]); | 291 resultBuilder.add(otherCharsAlphabet[index]); |
292 return resultBuilder.toString(); | 292 return resultBuilder.toString(); |
293 } | 293 } |
294 } | 294 } |
OLD | NEW |