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

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

Issue 11267046: [dart2dart] fix after https://codereview.chromium.org/11227007 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase after Peter's CL. Fix most of tests. Created 8 years, 2 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 bf35ab3a9ecb8047ad7ca508c34279a7f9b21c43..c1406ce4357705833cd4d11c6f81d6d2ad39b23e 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/lib/compiler/implementation/dart_backend/renamer.dart
@@ -83,12 +83,59 @@ void renamePlaceholders(
}
}
+ String renameType(DartType type, Function renameElement) {
+ // TODO(smok): Do not rename type if it is in platform library or
+ // js-helpers.
+ StringBuffer result = new StringBuffer(renameElement(type.element));
+ if (type is InterfaceType && !type.arguments.isEmpty) {
+ result.add('<');
+ Link<DartType> argumentsLink = type.arguments;
+ result.add(renameType(argumentsLink.head, renameElement));
+ for (Link<DartType> link = argumentsLink.tail; !link.isEmpty;
+ link = link.tail) {
+ result.add(',');
+ result.add(renameType(link.head, renameElement));
+ }
+ result.add('>');
+ }
+ return result.toString();
+ }
+
+ String renameConstructor(Element element, DartType type,
+ Function renameString, Function renameElement) {
+ assert(element.isConstructor());
+ StringBuffer result = new StringBuffer();
+ String name = element.name.slowToString();
+ if (element.name != element.getEnclosingClass().name) {
+ // Named constructor or factory. Is there a more reliable way to check
+ // this case?
+ result.add(renameType(type, renameElement));
+ result.add('.');
+ String prefix = '${element.getEnclosingClass().name.slowToString()}\$';
+ if (!name.startsWith(prefix)) {
+ // Factory for another interface (that is going away soon).
+ compiler.internalErrorOnElement(element,
+ "Factory constructors for external interfaces are not supported.");
+ }
+ assert(name.startsWith(prefix));
+ name = name.substring(prefix.length);
+ // result.add(renameString(element.getLibrary(), name));
+ result.add(name);
+ } else {
+ result.add(renameType(type, renameElement));
+ }
+ return result.toString();
+ }
+
Function makeElementRenamer(rename, generateUniqueName) => (element) {
assert(Elements.isStaticOrTopLevel(element)
|| element is TypeVariableElement);
// TODO(smok): We may want to reuse class static field and method names.
String originalName = element.name.slowToString();
LibraryElement library = element.getLibrary();
+ if (identical(element.getLibrary(), compiler.coreLibrary)) {
+ return originalName;
+ }
if (library.isPlatformLibrary) {
assert(element.isTopLevel());
final prefix =
@@ -108,6 +155,7 @@ void renamePlaceholders(
// Renamer function that takes library and original name and returns a new
// name for given identifier.
Function rename;
+ Function renameElement;
// A function that takes original identifier name and generates a new unique
// identifier.
Function generateUniqueName;
@@ -119,7 +167,7 @@ void renamePlaceholders(
generateUniqueName = (_) =>
generator.generate(forbiddenIdentifiers.contains);
rename = makeRenamer(generateUniqueName);
- Function renameElement = makeElementRenamer(rename, generateUniqueName);
+ renameElement = makeElementRenamer(rename, generateUniqueName);
Set<String> allParameterIdentifiers = new Set<String>();
for (var functionScope in placeholderCollector.functionScopes.values) {
@@ -188,7 +236,7 @@ void renamePlaceholders(
return newName;
};
rename = makeRenamer(generateUniqueName);
- Function renameElement = makeElementRenamer(rename, generateUniqueName);
+ renameElement = makeElementRenamer(rename, generateUniqueName);
// Rename elements.
sortedForEach(placeholderCollector.elementNodes,
(Element element, Set<Node> nodes) {
@@ -230,6 +278,14 @@ void renamePlaceholders(
});
}
+ // Rename constructors.
+ placeholderCollector.constructorPlaceholders.forEach(
+ (Element constructor, List<ConstructorPlaceholder> placeholders) {
+ for (ConstructorPlaceholder ph in placeholders) {
+ renames[ph.node] =
+ renameConstructor(constructor, ph.type, rename, renameElement);
+ }
+ });
sortedForEach(placeholderCollector.privateNodes, (library, nodes) {
renameNodes(nodes, (node) => rename(library, node.source.slowToString()));
});

Powered by Google App Engine
This is Rietveld 408576698