Chromium Code Reviews| Index: dart/frog/leg/namer.dart |
| diff --git a/dart/frog/leg/namer.dart b/dart/frog/leg/namer.dart |
| index b4c84044cd70c6f3edef7ff444a0822ed62d8b8e..5616fa15ff5c7f8f462a0bc3121f9e6daefb5bff 100644 |
| --- a/dart/frog/leg/namer.dart |
| +++ b/dart/frog/leg/namer.dart |
| @@ -34,15 +34,21 @@ class Namer { |
| String closureInvocationName(Selector selector) { |
| // TODO(floitsch): mangle, while not conflicting with instance names. |
| - return instanceMethodInvocationName(CLOSURE_INVOCATION_NAME, selector); |
| + return instanceMethodInvocationName(null, CLOSURE_INVOCATION_NAME, |
| + selector); |
| } |
| - String instanceMethodName(SourceString name, int arity) { |
| + String instanceMethodName(LibraryElement lib, SourceString name, int arity) { |
| // TODO(floitsch): mangle, while preserving uniqueness. |
| - return '${name.slowToString()}\$$arity'; |
| + if (name.isPrivate()) { |
|
kasperl
2012/03/13 13:43:51
How about refactoring this pattern?
ahe
2012/03/17 22:19:44
Done.
|
| + return '_${getName(lib)}${name.slowToString()}\$$arity'; |
| + } else { |
| + return '${name.slowToString()}\$$arity'; |
| + } |
| } |
| - String instanceMethodInvocationName(SourceString name, Selector selector) { |
| + String instanceMethodInvocationName(LibraryElement lib, SourceString name, |
| + Selector selector) { |
| // TODO(floitsch): mangle, while preserving uniqueness. |
| StringBuffer buffer = new StringBuffer(); |
| List<SourceString> names = selector.getOrderedNamedArguments(); |
| @@ -50,19 +56,35 @@ class Namer { |
| buffer.add(@'$'); |
| name.printOn(buffer); |
| } |
| - return '${name.slowToString()}\$${selector.argumentCount}$buffer'; |
| + if (name.isPrivate()) { |
| + return '_${getName(lib)}${name.slowToString()}\$${selector.argumentCount}$buffer'; |
|
ngeoffray
2012/03/13 12:47:11
line too long
ahe
2012/03/17 22:19:44
Done.
|
| + } else { |
| + return '${name.slowToString()}\$${selector.argumentCount}$buffer'; |
| + } |
| } |
| - String instanceFieldName(SourceString name) { |
| - return name.slowToString(); |
| + String instanceFieldName(LibraryElement lib, SourceString name) { |
| + if (name.isPrivate()) { |
| + return '_${getName(lib)}${name.slowToString()}'; |
| + } else { |
| + return name.slowToString(); |
| + } |
| } |
| - String setterName(SourceString name) { |
| - return 'set\$${name.slowToString()}'; |
| + String setterName(LibraryElement lib, SourceString name) { |
| + if (name.isPrivate()) { |
| + return 'set\$_${getName(lib)}${name.slowToString()}'; |
| + } else { |
| + return 'set\$${name.slowToString()}'; |
| + } |
| } |
| - String getterName(SourceString name) { |
| - return 'get\$${name.slowToString()}'; |
| + String getterName(LibraryElement lib, SourceString name) { |
| + if (name.isPrivate()) { |
| + return 'get\$_${getName(lib)}${name.slowToString()}'; |
| + } else { |
| + return 'get\$${name.slowToString()}'; |
| + } |
| } |
| String getFreshGlobalName(String proposedName) { |
| @@ -89,21 +111,24 @@ class Namer { |
| */ |
| String _computeGuess(Element element) { |
| assert(!element.isInstanceMember()); |
| + LibraryElement lib = element.getLibrary(); |
| if (element.kind == ElementKind.GENERATIVE_CONSTRUCTOR) { |
| FunctionElement functionElement = element; |
| - return instanceMethodName( |
| - element.name, functionElement.parameterCount(compiler)); |
| + return instanceMethodName(lib, element.name, |
| + functionElement.parameterCount(compiler)); |
| } else { |
| // TODO(floitsch): deal with named constructors. |
| String name; |
| if (element.kind == ElementKind.GETTER) { |
| - name = getterName(element.name); |
| + name = getterName(lib, element.name); |
|
floitsch
2012/03/13 13:28:56
I agree that this makes the code maybe even simple
ahe
2012/03/13 15:48:58
Good point, I didn't think about that.
Actually,
|
| } else if (element.kind == ElementKind.SETTER) { |
| - name = setterName(element.name); |
| + name = setterName(lib, element.name); |
| } else if (element.kind == ElementKind.FUNCTION) { |
| FunctionElement functionElement = element; |
| name = element.name.slowToString(); |
| name = '$name\$${functionElement.parameterCount(compiler)}'; |
|
floitsch
2012/03/13 13:28:56
Actually we don't need to care for the parameterCo
ahe
2012/03/13 15:48:58
Another good point I didn't think about.
|
| + } else if (element.kind === ElementKind.LIBRARY) { |
| + name = 'lib'; |
|
ngeoffray
2012/03/13 12:47:11
Very surprised by this, it should not happen.
ahe
2012/03/13 15:48:58
It is because I started using getName on libraries
|
| } else { |
| name = '${element.name.slowToString()}'; |
| } |
| @@ -133,17 +158,19 @@ class Namer { |
| if (element.kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY) { |
| ConstructorBodyElement bodyElement = element; |
| SourceString name = bodyElement.constructor.name; |
| - return instanceMethodName(name, bodyElement.parameterCount(compiler)); |
| + return instanceMethodName(element.getLibrary(), |
| + name, bodyElement.parameterCount(compiler)); |
| } else if (element.kind == ElementKind.FUNCTION) { |
| FunctionElement functionElement = element; |
| - return instanceMethodName( |
| - element.name, functionElement.parameterCount(compiler)); |
| + return instanceMethodName(element.getLibrary(), |
| + element.name, |
| + functionElement.parameterCount(compiler)); |
| } else if (element.kind == ElementKind.GETTER) { |
| - return getterName(element.name); |
| + return getterName(element.getLibrary(), element.name); |
| } else if (element.kind == ElementKind.SETTER) { |
| - return setterName(element.name); |
| + return setterName(element.getLibrary(), element.name); |
| } else { |
| - return instanceFieldName(element.name); |
| + return instanceFieldName(element.getLibrary(), element.name); |
| } |
| } else { |
| // Dealing with a top-level or static element. |
| @@ -164,6 +191,7 @@ class Namer { |
| case ElementKind.GETTER: |
| case ElementKind.SETTER: |
| case ElementKind.TYPEDEF: |
| + case ElementKind.LIBRARY: |
|
ngeoffray
2012/03/13 12:47:11
ditto.
|
| String result = getFreshGlobalName(guess); |
| globals[element] = result; |
| return result; |