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

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

Issue 10829076: Support imports for dart: libs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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 47bdbee52bb044974c9c3df49c5bbab42e0a1d7c..dfcecd2aa2ad1861885635bcdde436350742b198 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/lib/compiler/implementation/dart_backend/renamer.dart
@@ -10,6 +10,7 @@ class ConflictingRenamer extends Renamer {
final Compiler compiler;
final Map<Element, String> renamed;
final Set<String> usedTopLevelIdentifiers;
+ final Map<LibraryElement, String> imports;
TreeElements contextElements;
Element context;
@@ -18,7 +19,8 @@ class ConflictingRenamer extends Renamer {
ConflictingRenamer(this.compiler) :
renamed = new Map<Element, String>(),
- usedTopLevelIdentifiers = new Set<String>();
+ usedTopLevelIdentifiers = new Set<String>(),
+ imports = new Map<LibraryElement, String>();
void setContext(Element element) {
this.context = element;
@@ -82,9 +84,21 @@ class ConflictingRenamer extends Renamer {
}
String renameElement(Element element) {
+ generateUniqueName(name) {
+ while (usedTopLevelIdentifiers.contains(name)) {
+ name = "x$name";
Roman 2012/07/30 14:43:30 Why 'x'? 'x' is an ordinary letter, it will be har
Anton Muhin 2012/07/30 14:54:31 Agree, but apparently due to the bug in DartVM, '_
Roman 2012/07/30 15:03:42 That's sad. Maybe '$' ? or anything else?
Anton Muhin 2012/07/30 15:37:16 Done.
+ }
+ usedTopLevelIdentifiers.add(name);
+ return name;
+ }
+
String originalName = element.name.slowToString();
- if (element.getLibrary() == compiler.coreLibrary || !element.isTopLevel()) {
- return originalName;
+ // TODO(antonm): we should rename lib private names as well.
+ if (!element.isTopLevel()) return originalName;
+ final library = element.getLibrary();
+ if (isDartCoreLib(compiler, library)) {
+ final prefix = imports.putIfAbsent(library, () => generateUniqueName('p'));
Roman 2012/07/30 14:43:30 Why 'p' as a prefix? Easier to read would be somet
Anton Muhin 2012/07/30 14:54:31 I am not sure it's a valid Dart identifier. Plus
Roman 2012/07/30 15:03:42 We can fix it if for some reason this will not be
+ return '$prefix.$originalName';
}
if (renamed[element] !== null) {
Roman 2012/07/30 14:43:30 Should this check be moved to before generating re
Anton Muhin 2012/07/30 14:54:31 Done.
return renamed[element];
@@ -93,12 +107,6 @@ class ConflictingRenamer extends Renamer {
// Not renamed and top element.
// TODO(smok): Make sure that the new name does not conflict with existing
// local identifiers.
- String name = originalName;
- while (usedTopLevelIdentifiers.contains(name)) {
- name = "_$name";
- }
- usedTopLevelIdentifiers.add(name);
- renamed[element] = name;
- return name;
+ return renamed[element] = generateUniqueName(originalName);
}
}

Powered by Google App Engine
This is Rietveld 408576698