| 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..ac4a1f644613b34541f2c99286e4c13d6338626a 100644
|
| --- a/lib/compiler/implementation/dart_backend/renamer.dart
|
| +++ b/lib/compiler/implementation/dart_backend/renamer.dart
|
| @@ -8,26 +8,57 @@
|
| */
|
| class ConflictingRenamer {
|
| 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));
|
| +
|
| + // Process local placeholders.
|
| + placeholderCollector.localPlaceholders.forEach(
|
| + (Element element, Map<Node, LocalPlaceholder> localPlaceholders) {
|
| + localPlaceholders.forEach((Node node, LocalPlaceholder placeholder) {
|
| + // TODO(smok): Check for conflicts with class fields and take usages
|
| + // into account.
|
| + renames[node] = placeholder.identifier;
|
| + });
|
| + });
|
| + // Process element placeholders.
|
| + renamePlaceholders(placeholderCollector.elementPlaceholders,
|
| + (ElementPlaceholder placeholder) => renameElement(placeholder.element));
|
| + // Process null placeholders.
|
| + renamePlaceholders(placeholderCollector.nullPlaceholders,
|
| + (NullPlaceholder placeholder) => '');
|
| + // Process private placeholders.
|
| + renamePlaceholders(placeholderCollector.privatePlaceholders,
|
| + (PrivatePlaceholder placeholder) =>
|
| + renamePrivateIdentifier(placeholder.library,
|
| + placeholder.node.source.slowToString()));
|
| + // Process unresolved placeholders.
|
| + renamePlaceholders(placeholderCollector.unresolvedPlaceholders,
|
| + (UnresolvedPlaceholder placeholder) =>
|
| + generateUniqueName('Unresolved'));
|
| }
|
|
|
| - // 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 +72,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
|
|
|