Chromium Code Reviews| Index: lib/compiler/implementation/dart_backend/renamer.dart |
| diff --git a/lib/compiler/implementation/dart_backend/renamer.dart b/lib/compiler/implementation/dart_backend/renamer.dart |
| index a2036d532d5fdce56d836573cb9410a66edbaace..0d92fe17a07376a057a4a217eb27f6263e55f4f2 100644 |
| --- a/lib/compiler/implementation/dart_backend/renamer.dart |
| +++ b/lib/compiler/implementation/dart_backend/renamer.dart |
| @@ -8,26 +8,62 @@ |
| */ |
| class ConflictingRenamer { |
|
Anton Muhin
2012/08/15 13:45:46
Now you don't need ConflictingRenamer, all you rea
Roman
2012/08/15 13:59:14
Yes, as discussed, I will in next CL first fix Emi
|
| final Compiler compiler; |
| + final PlaceholderCollector placeholderCollector; |
| final Map<LibraryElement, Map<String, String>> renamed; |
| final Set<String> usedTopLevelIdentifiers; |
| final Map<LibraryElement, String> imports; |
| - final Map<Node, Placeholder> placeholders; |
| + final Map<Node, String> renames; |
| int privateNameCounter = 0; |
| - ConflictingRenamer(this.compiler, this.placeholders) : |
| + ConflictingRenamer(this.compiler, this.placeholderCollector) : |
| renamed = new Map<LibraryElement, Map<String, String>>(), |
| usedTopLevelIdentifiers = new Set<String>(), |
| - imports = new Map<LibraryElement, String>() { |
| + imports = new Map<LibraryElement, String>(), |
| + renames = new Map<Node, String>() { |
| // Rename main() right now so that nobody takes its place. |
| renameElement(compiler.mainApp.find(Compiler.MAIN)); |
| + |
| + placeholderCollector.nullNodes.forEach((Node node) { |
| + renames[node] = ''; |
| + }); |
| + placeholderCollector.unresolvedNodes.forEach((Node node) { |
| + renames[node] = generateUniqueName('Unresolved'); |
| + }); |
| + placeholderCollector.elementNodes.forEach((Element element, Set<Node> nodes) { |
|
Anton Muhin
2012/08/15 13:45:46
nit: too long string?
Roman
2012/08/15 13:59:14
Done.
|
| + String renamedElement = renameElement(element); |
| + nodes.forEach((Node node) { |
| + renames[node] = renamedElement; |
| + }); |
| + }); |
| + placeholderCollector.localPlaceholders.forEach( |
| + (FunctionElement element, Set<LocalPlaceholder> localPlaceholders) { |
| + // TODO(smok): Check for conflicts with class fields and take usages |
| + // into account. |
| + localPlaceholders.forEach((LocalPlaceholder placeholder) { |
| + placeholder.nodes.forEach((Node node) { |
| + renames[node] = placeholder.identifier; |
| + }); |
| + }); |
| + }); |
| + placeholderCollector.privateNodes.forEach( |
| + (LibraryElement library, Set<Identifier> nodes) { |
| + nodes.forEach((Identifier node) { |
| + renames[node] = |
| + renamePrivateIdentifier(library, node.source.slowToString()); |
| + }); |
| + }); |
| } |
| - // Renamer implementation. |
| - String rename(Node node) { |
| - Placeholder placeholder = placeholders[node]; |
| - return (placeholder !== null) ? placeholder.rename(this) : null; |
| + void renamePlaceholders(Map<Node, Placeholder> placeholders, |
| + String rename(Placeholder placeholder)) { |
| + placeholders.forEach((Node node, Placeholder placeholder) { |
| + renames[node] = rename(placeholder); |
| + }); |
| } |
| + // Renamer implementation. |
| + String rename(Node node) => renames[node]; |
| + |
| String getName(LibraryElement library, String originalName, renamer) => |
| renamed.putIfAbsent(library, () => <String>{}) |
| .putIfAbsent(originalName, renamer); |
| @@ -41,11 +77,6 @@ class ConflictingRenamer { |
| return name; |
| } |
| - // TODO(smok): Check for conflicts with class fields and take usages |
| - // into account. |
| - String renameLocalIdentifier(FunctionElement scope, String identifier) => |
| - identifier; |
| - |
| String renameElement(Element element) { |
| assert(element.isTopLevel()); |
| // TODO(smok): Make sure that the new name does not conflict with existing |