Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(916)

Unified Diff: lib/compiler/implementation/dart_backend/renamer.dart

Issue 10836261: dart2dart Preproces placeholders instead of renaming them lazily, (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698