Index: pkg/compiler/lib/src/js_backend/namer.dart |
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart |
index 1dd4fc100e53f96896b741fd9a12990c4609271c..af5ac3bb0ee4c8327d964c170338b6219f800525 100644 |
--- a/pkg/compiler/lib/src/js_backend/namer.dart |
+++ b/pkg/compiler/lib/src/js_backend/namer.dart |
@@ -496,23 +496,27 @@ class Namer { |
* |
* The resulting name is a *proposed name* and is never minified. |
*/ |
- String privateName(LibraryElement library, String originalName) { |
+ String privateName(Name originalName) { |
+ String text = originalName.text; |
+ |
// Public names are easy. |
- if (!isPrivateName(originalName)) return originalName; |
+ if (!originalName.isPrivate) return text; |
+ |
+ LibraryElement library = originalName.library; |
// The first library asking for a short private name wins. |
LibraryElement owner = |
- shortPrivateNameOwners.putIfAbsent(originalName, () => library); |
+ shortPrivateNameOwners.putIfAbsent(text, () => library); |
if (owner == library) { |
- return originalName; |
+ return text; |
} else { |
// Make sure to return a private name that starts with _ so it |
// cannot clash with any public names. |
// The name is still not guaranteed to be unique, since both the library |
// name and originalName could contain $ symbols. |
String libraryName = _disambiguateGlobal(library); |
- return '_$libraryName\$${originalName}'; |
+ return '_$libraryName\$${text}'; |
} |
} |
@@ -558,9 +562,9 @@ class Namer { |
/// |
/// This is used for the annotated names of `call`, and for the proposed name |
/// for other instance methods. |
- List<String> callSuffixForSelector(Selector selector) { |
- List<String> suffixes = ['${selector.argumentCount}']; |
- suffixes.addAll(selector.getOrderedNamedArguments()); |
+ List<String> callSuffixForStructure(CallStructure callStructure) { |
+ List<String> suffixes = ['${callStructure.argumentCount}']; |
+ suffixes.addAll(callStructure.getOrderedNamedArguments()); |
return suffixes; |
} |
@@ -582,14 +586,13 @@ class Namer { |
/// Annotated name for the member being invoked by [selector]. |
String invocationName(Selector selector) { |
- LibraryElement library = selector.library; |
switch (selector.kind) { |
case SelectorKind.GETTER: |
- String disambiguatedName = _disambiguateMember(library, selector.name); |
+ String disambiguatedName = _disambiguateMember(selector.memberName); |
return deriveGetterName(disambiguatedName); |
case SelectorKind.SETTER: |
- String disambiguatedName = _disambiguateMember(library, selector.name); |
+ String disambiguatedName = _disambiguateMember(selector.memberName); |
return deriveSetterName(disambiguatedName); |
case SelectorKind.OPERATOR: |
@@ -599,13 +602,13 @@ class Namer { |
return disambiguatedName; // Operators are not annotated. |
case SelectorKind.CALL: |
- List<String> suffix = callSuffixForSelector(selector); |
+ List<String> suffix = callSuffixForStructure(selector.callStructure); |
if (selector.name == Compiler.CALL_OPERATOR_NAME) { |
// Derive the annotated name for this variant of 'call'. |
return deriveCallMethodName(suffix); |
} |
String disambiguatedName = |
- _disambiguateMember(library, selector.name, suffix); |
+ _disambiguateMember(selector.memberName, suffix); |
return disambiguatedName; // Methods other than call are not annotated. |
default: |
@@ -625,9 +628,9 @@ class Namer { |
* Returns the disambiguated name for the given field, used for constructing |
* the getter and setter names. |
*/ |
- String fieldAccessorName(Element element) { |
+ String fieldAccessorName(FieldElement element) { |
return element.isInstanceMember |
- ? _disambiguateMember(element.library, element.name) |
+ ? _disambiguateMember(element.memberName) |
: _disambiguateGlobal(element); |
} |
@@ -635,7 +638,7 @@ class Namer { |
* Returns name of the JavaScript property used to store a static or instance |
* field. |
*/ |
- String fieldPropertyName(Element element) { |
+ String fieldPropertyName(FieldElement element) { |
return element.isInstanceMember |
? instanceFieldPropertyName(element) |
: _disambiguateGlobal(element); |
@@ -663,7 +666,7 @@ class Namer { |
/** |
* Returns the JavaScript property name used to store an instance field. |
*/ |
- String instanceFieldPropertyName(Element element) { |
+ String instanceFieldPropertyName(FieldElement element) { |
ClassElement enclosingClass = element.enclosingClass; |
if (element.hasFixedBackendName) { |
@@ -703,7 +706,7 @@ class Namer { |
// No superclass uses the disambiguated name as a property name, so we can |
// use it for this field. This generates nicer field names since otherwise |
// the field name would have to be mangled. |
- return _disambiguateMember(element.library, element.name); |
+ return _disambiguateMember(element.memberName); |
} |
bool _isShadowingSuperField(Element element) { |
@@ -717,10 +720,10 @@ class Namer { |
} |
/// Annotated name for the setter of [element]. |
- String setterForElement(Element element) { |
+ String setterForElement(MemberElement element) { |
// We dynamically create setters from the field-name. The setter name must |
// therefore be derived from the instance field-name. |
- String name = _disambiguateMember(element.library, element.name); |
+ String name = _disambiguateMember(element.memberName); |
return deriveSetterName(name); |
} |
@@ -739,28 +742,19 @@ class Namer { |
} |
/// Annotated name for the getter of [element]. |
- String getterForElement(Element element) { |
+ String getterForElement(MemberElement element) { |
// We dynamically create getters from the field-name. The getter name must |
// therefore be derived from the instance field-name. |
- String name = _disambiguateMember(element.library, element.name); |
+ String name = _disambiguateMember(element.memberName); |
return deriveGetterName(name); |
} |
- /// Property name for the getter of an instance member with [originalName] |
- /// in [library]. |
- /// |
- /// [library] may be `null` if [originalName] is known to be public. |
- String getterForMember(LibraryElement library, String originalName) { |
- String disambiguatedName = _disambiguateMember(library, originalName); |
+ /// Property name for the getter of an instance member with [originalName]. |
+ String getterForMember(Name originalName) { |
+ String disambiguatedName = _disambiguateMember(originalName); |
return deriveGetterName(disambiguatedName); |
} |
- /// Property name for the getter or a public instance member with |
- /// [originalName]. |
- String getterForPublicMember(String originalName) { |
- return getterForMember(null, originalName); |
- } |
- |
/// Disambiguated name for a compiler-owned global variable. |
/// |
/// The resulting name is unique within the global-member namespace. |
@@ -822,23 +816,19 @@ class Namer { |
/// The resulting name, and its associated annotated names, are unique |
/// to the ([originalName], [suffixes]) pair within the instance-member |
/// namespace. |
- String _disambiguateMember(LibraryElement library, |
- String originalName, |
+ String _disambiguateMember(Name originalName, |
[List<String> suffixes = const []]) { |
- // For private names, a library must be given. |
- assert(isPublicName(originalName) || library != null); |
- |
// Build a string encoding the library name, if the name is private. |
- String libraryKey = isPrivateName(originalName) |
- ? _disambiguateGlobal(library) |
+ String libraryKey = originalName.isPrivate |
+ ? _disambiguateGlobal(originalName.library) |
: ''; |
// In the unique key, separate the name parts by '@'. |
// This avoids clashes since the original names cannot contain that symbol. |
- String key = '$libraryKey@$originalName@${suffixes.join('@')}'; |
+ String key = '$libraryKey@${originalName.text}@${suffixes.join('@')}'; |
String newName = userInstanceMembers[key]; |
if (newName == null) { |
- String proposedName = privateName(library, originalName); |
+ String proposedName = privateName(originalName); |
if (!suffixes.isEmpty) { |
// In the proposed name, separate the name parts by '$', because the |
// proposed name must be a valid identifier, but not necessarily unique. |