Chromium Code Reviews| 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())); |
| }); |