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

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..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

Powered by Google App Engine
This is Rietveld 408576698