aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/NameKinds.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-30 13:44:02 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-11 09:33:11 +0200
commit21ded6ee9f727bd5a1c3975809c06868fe1b5536 (patch)
tree84675fd26ebfd422bb166088f8b048f7963c9720 /compiler/src/dotty/tools/dotc/core/NameKinds.scala
parentae694957bfb9f5121eee3434243ecaabb6b24d1d (diff)
downloaddotty-21ded6ee9f727bd5a1c3975809c06868fe1b5536.tar.gz
dotty-21ded6ee9f727bd5a1c3975809c06868fe1b5536.tar.bz2
dotty-21ded6ee9f727bd5a1c3975809c06868fe1b5536.zip
Revise qualified names
1. Fix problem in fullNameSeparated 2. Revise expandedName operations
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/NameKinds.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/NameKinds.scala28
1 files changed, 20 insertions, 8 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameKinds.scala b/compiler/src/dotty/tools/dotc/core/NameKinds.scala
index eea5aefe3..381bb3fc0 100644
--- a/compiler/src/dotty/tools/dotc/core/NameKinds.scala
+++ b/compiler/src/dotty/tools/dotc/core/NameKinds.scala
@@ -14,8 +14,8 @@ import collection.mutable
object NameKinds {
@sharable private val simpleNameKinds = new mutable.HashMap[Int, ClassifiedNameKind]
+ @sharable private val qualifiedNameKinds = new mutable.HashMap[Int, QualifiedNameKind]
@sharable private val uniqueNameKinds = new mutable.HashMap[String, UniqueNameKind]
- @sharable private val qualifiedNameKinds = new mutable.HashMap[String, QualifiedNameKind]
abstract class NameInfo extends DotClass {
def kind: NameKind
@@ -83,8 +83,18 @@ object NameKinds {
override def map(f: SimpleTermName => SimpleTermName): NameInfo = new QualInfo(f(name))
override def toString = s"$infoString $name"
}
- def apply(qual: TermName, name: SimpleTermName) =
+ def apply(qual: TermName, name: SimpleTermName): TermName =
qual.derived(new QualInfo(name))
+
+ /** Overloaded version used only for ExpandedName and TraitSetterName.
+ * Needed because the suffix of an expanded name may itself be expanded.
+ * For example, look at javap of scala.App.initCode
+ */
+ def apply(qual: TermName, name: TermName): TermName = name rewrite {
+ case name: SimpleTermName => apply(qual, name)
+ case AnyQualifiedName(_, _) => apply(qual, name.toSimpleName)
+ }
+
def unapply(name: DerivedTermName): Option[(TermName, SimpleTermName)] = name match {
case DerivedTermName(qual, info: this.QualInfo) => Some((qual, info.name))
case _ => None
@@ -96,7 +106,7 @@ object NameKinds {
s"$underlying$separator${info.name}"
def infoString = s"Qualified $separator"
- qualifiedNameKinds(separator) = this
+ qualifiedNameKinds(tag) = this
}
object AnyQualifiedName {
@@ -150,8 +160,8 @@ object NameKinds {
}
val QualifiedName = new QualifiedNameKind(QUALIFIED, ".")
- val FlattenedName = new QualifiedNameKind(FLATTENED, "$")
- val TraitSetterName = new QualifiedNameKind(TRAITSETTER, str.TRAIT_SETTER_SEPARATOR)
+ val FlatName = new QualifiedNameKind(FLATTENED, "$")
+ val ExpandPrefixName = new QualifiedNameKind(EXPANDPREFIX, "$")
val ExpandedName = new QualifiedNameKind(EXPANDED, str.EXPAND_SEPARATOR) {
private val FalseSuper = "$$super".toTermName
@@ -172,6 +182,8 @@ object NameKinds {
}
}
+ val TraitSetterName = new QualifiedNameKind(TRAITSETTER, str.TRAIT_SETTER_SEPARATOR)
+
val UniqueName = new UniqueNameKind("$") {
override def mkString(underlying: TermName, info: ThisInfo) =
if (underlying.isEmpty) "$" + info.num + "$" else super.mkString(underlying, info)
@@ -260,7 +272,7 @@ object NameKinds {
val Scala2MethodNameKinds: List[NameKind] =
List(DefaultGetterName, ProtectedAccessorName, ProtectedSetterName)
- def simpleNameKindOfTag : collection.Map[Int, ClassifiedNameKind] = simpleNameKinds
- def qualifiedNameKindOfSeparator: collection.Map[String, QualifiedNameKind] = qualifiedNameKinds
- def uniqueNameKindOfSeparator : collection.Map[String, UniqueNameKind] = uniqueNameKinds
+ def simpleNameKindOfTag : collection.Map[Int, ClassifiedNameKind] = simpleNameKinds
+ def qualifiedNameKindOfTag : collection.Map[Int, QualifiedNameKind] = qualifiedNameKinds
+ def uniqueNameKindOfSeparator: collection.Map[String, UniqueNameKind] = uniqueNameKinds
} \ No newline at end of file