diff options
Diffstat (limited to 'src/compiler/scala/reflect/internal/NameManglers.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/NameManglers.scala | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/compiler/scala/reflect/internal/NameManglers.scala b/src/compiler/scala/reflect/internal/NameManglers.scala index d4aa6339ff..ef092f16bb 100644 --- a/src/compiler/scala/reflect/internal/NameManglers.scala +++ b/src/compiler/scala/reflect/internal/NameManglers.scala @@ -23,8 +23,8 @@ trait NameManglers { val MODULE_SUFFIX_STRING = NameTransformer.MODULE_SUFFIX_STRING val NAME_JOIN_STRING = NameTransformer.NAME_JOIN_STRING - val MODULE_SUFFIX_NAME: TermName = MODULE_SUFFIX_STRING - val NAME_JOIN_NAME: TermName = NAME_JOIN_STRING + val MODULE_SUFFIX_NAME: TermName = newTermName(MODULE_SUFFIX_STRING) + val NAME_JOIN_NAME: TermName = newTermName(NAME_JOIN_STRING) def flattenedName(segments: Name*): NameType = compactedString(segments mkString NAME_JOIN_STRING) @@ -75,12 +75,12 @@ trait NameManglers { val LOCALDUMMY_PREFIX = "<local " // owner of local blocks val PROTECTED_PREFIX = "protected$" val PROTECTED_SET_PREFIX = PROTECTED_PREFIX + "set" - val SETTER_SUFFIX = encode("_=") val SINGLETON_SUFFIX = ".type" val SPECIALIZED_SUFFIX_STRING = "$sp" val SUPER_PREFIX_STRING = "super$" val TRAIT_SETTER_SEPARATOR_STRING = "$_setter_$" + val SETTER_SUFFIX: TermName = encode("_=") val SPECIALIZED_SUFFIX_NAME: TermName = SPECIALIZED_SUFFIX_STRING def isConstructorName(name: Name) = name == CONSTRUCTOR || name == MIXIN_CONSTRUCTOR @@ -124,6 +124,11 @@ trait NameManglers { name.subName(0, name.lastIndexOf('m') - 1) else name ) + + def macroMethodName(name: Name) = { + val base = if (name.isTypeName) nme.TYPEkw else nme.DEFkw + base append nme.MACRO append name + } /** Return the original name and the types on which this name * is specialized. For example, @@ -136,7 +141,7 @@ trait NameManglers { */ def splitSpecializedName(name: Name): (Name, String, String) = if (name endsWith SPECIALIZED_SUFFIX_NAME) { - val name1 = name stripEnd SPECIALIZED_SUFFIX_NAME + val name1 = name dropRight SPECIALIZED_SUFFIX_NAME.length val idxC = name1 lastIndexOf 'c' val idxM = name1 lastIndexOf 'm' @@ -147,18 +152,18 @@ trait NameManglers { (name, "", "") def getterName(name: TermName): TermName = if (isLocalName(name)) localToGetter(name) else name - def getterToLocal(name: TermName): TermName = name.toTermName append LOCAL_SUFFIX_STRING - def getterToSetter(name: TermName): TermName = name.toTermName append SETTER_SUFFIX - def localToGetter(name: TermName): TermName = name stripEnd LOCAL_SUFFIX_STRING toTermName + def getterToLocal(name: TermName): TermName = name append LOCAL_SUFFIX_STRING + def getterToSetter(name: TermName): TermName = name append SETTER_SUFFIX + def localToGetter(name: TermName): TermName = name dropRight LOCAL_SUFFIX_STRING.length def dropLocalSuffix(name: Name): Name = if (name endsWith ' ') name dropRight 1 else name def setterToGetter(name: TermName): TermName = { val p = name.pos(TRAIT_SETTER_SEPARATOR_STRING) if (p < name.length) - setterToGetter(name.subName(p + TRAIT_SETTER_SEPARATOR_STRING.length, name.length)) + setterToGetter(name drop (p + TRAIT_SETTER_SEPARATOR_STRING.length)) else - name stripEnd SETTER_SUFFIX toTermName + name.subName(0, name.length - SETTER_SUFFIX.length) } def defaultGetterName(name: Name, pos: Int): TermName = { @@ -167,8 +172,8 @@ trait NameManglers { } def defaultGetterToMethod(name: Name): TermName = { val p = name.pos(DEFAULT_GETTER_STRING) - if (p < name.length) name.subName(0, p) - else name + if (p < name.length) name.toTermName.subName(0, p) + else name.toTermName } /** !!! I'm putting this logic in place because I can witness @@ -192,18 +197,14 @@ trait NameManglers { } def stripModuleSuffix(name: Name): Name = ( - if (isModuleName(name)) name stripEnd MODULE_SUFFIX_STRING else name + if (isModuleName(name)) name dropRight MODULE_SUFFIX_STRING.length else name ) - /** Note that for performance reasons, stripEnd does not verify that the - * suffix is actually the suffix specified. - */ - def dropSingletonName(name: Name): TypeName = name stripEnd SINGLETON_SUFFIX toTypeName + def dropSingletonName(name: Name): TypeName = name dropRight SINGLETON_SUFFIX.length toTypeName def singletonName(name: Name): TypeName = name append SINGLETON_SUFFIX toTypeName def implClassName(name: Name): TypeName = name append IMPL_CLASS_SUFFIX toTypeName - def interfaceName(implname: Name): TypeName = implname stripEnd IMPL_CLASS_SUFFIX toTypeName + def interfaceName(implname: Name): TypeName = implname dropRight IMPL_CLASS_SUFFIX.length toTypeName def localDummyName(clazz: Symbol): TermName = newTermName(LOCALDUMMY_PREFIX + clazz.name + ">") - def productAccessorName(i: Int): TermName = newTermName("_" + i) def superName(name: Name): TermName = newTermName(SUPER_PREFIX_STRING + name) /** The name of an accessor for protected symbols. */ |