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

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: 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 6c822d1abd6fc5b20e6d7d7235179bb2e8c57ec2..843b5edbc88f0ecf72ff28e63ad5c489649d322d 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/lib/compiler/implementation/dart_backend/renamer.dart
@@ -81,12 +81,49 @@ void renamePlaceholders(
}
}
+ String renameType(DartType type, Function renameElement) {
+ 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) {
ahe 2012/10/26 14:13:49 long line.
Roman 2012/10/29 18:14:12 Done.
+ result.add(',');
+ result.add(renameType(link.head, renameElement));
+ }
+ result.add('>');
+ }
+ return result.toString();
+ }
+
+ String renameConstructor(Element element, DartType type, Function renameString, Function renameElement) {
ahe 2012/10/26 14:13:49 Long line.
Roman 2012/10/29 18:14:12 Done.
+ assert(element.isConstructor());
+ // TODO: Is platform?
+ StringBuffer result = new StringBuffer();
+ String name = element.name.slowToString();
ahe 2012/10/26 14:13:49 This should really just be something like: elemen
+ if (element.name.slowToString() != element.getEnclosingClass().name.slowToString()) {
ahe 2012/10/26 14:13:49 Long line.
ahe 2012/10/26 14:13:49 Why are you calling slowToString on these names? Y
Roman 2012/10/29 18:14:12 Done.
+ // Named constructor or factory. Is there a more reliable way to check this case?
ahe 2012/10/26 14:13:49 Long line.
Roman 2012/10/29 18:14:12 Done.
+ // Could also be factory for another interface.
ahe 2012/10/26 14:13:49 We plan to use the empty string as name of constru
+ result.add(renameType(type, renameElement));
+ result.add('.');
+ String prefix = '${element.getEnclosingClass().name.slowToString()}\$';
+ assert(name.startsWith(prefix));
+ name = name.substring(prefix.length);
+ // result.add(renameString(element.getLibrary(), name));
+ result.add(name);
ahe 2012/10/26 14:13:49 This will get cleaned up. It is a ripe mess that w
+ } 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 =
@@ -106,6 +143,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;
@@ -117,7 +155,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.getValues()) {
@@ -186,7 +224,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) {
@@ -228,6 +266,13 @@ 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