diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-28 13:07:11 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-11 09:33:11 +0200 |
commit | 1e49ddad97c4e8207913857511ae62467f8cd3ce (patch) | |
tree | 9b5f38d746faec377c6778e902a627354808b05e /compiler/src/dotty/tools/dotc/core/NameExtractors.scala | |
parent | 0021ffb0f1a0a857b7cdc8cdf769ae727dcb4b2c (diff) | |
download | dotty-1e49ddad97c4e8207913857511ae62467f8cd3ce.tar.gz dotty-1e49ddad97c4e8207913857511ae62467f8cd3ce.tar.bz2 dotty-1e49ddad97c4e8207913857511ae62467f8cd3ce.zip |
Redefine definesNewName
Make it a method of info instead of a convention over tags, because
it's less fragile that way.
Also, add UniqueName extractor.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/NameExtractors.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/NameExtractors.scala | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala index 6045f0c10..2c5f5c164 100644 --- a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala +++ b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala @@ -16,6 +16,7 @@ object NameExtractors { abstract class NameInfo extends DotClass { def tag: Int + def definesNewName: Boolean = false def mkString(underlying: TermName): String def map(f: SimpleTermName => SimpleTermName): NameInfo = this } @@ -64,6 +65,7 @@ object NameExtractors { abstract class QualifiedNameExtractor(tag: Int, val separator: String, val infoString: String) extends NameExtractor(tag) { type ThisInfo = QualInfo case class QualInfo(val name: SimpleTermName) extends Info with QualifiedInfo { + override def definesNewName = true override def map(f: SimpleTermName => SimpleTermName): NameInfo = new QualInfo(f(name)) override def toString = s"$infoString $name" } @@ -89,9 +91,10 @@ object NameExtractors { def num: Int } - abstract class NumberedNameExtractor(tag: Int, val infoString: String) extends NameExtractor(tag) { + abstract class NumberedNameExtractor(tag: Int, val infoString: String) extends NameExtractor(tag) { self => type ThisInfo = NumberedInfo case class NumberedInfo(val num: Int) extends Info with NameExtractors.NumberedInfo { + override def definesNewName = self.definesNewName override def toString = s"$infoString $num" } def apply(qual: TermName, num: Int) = @@ -100,6 +103,14 @@ object NameExtractors { case DerivedTermName(underlying, info: this.NumberedInfo) => Some((underlying, info.num)) case _ => None } + def definesNewName = false + } + + class UniqueNameExtractor(sep: String) extends NumberedNameExtractor(UNIQUE, "Unique") { + val separator = if (sep.isEmpty) "$" else sep + override def definesNewName = !sep.isEmpty + def mkString(underlying: TermName, info: ThisInfo) = + underlying.toString + separator + info.num } object QualifiedName extends QualifiedNameExtractor(QUALIFIED, ".", "Qualified") @@ -148,8 +159,6 @@ object NameExtractors { def infoString: String = "Signed" } - def definesNewName(tag: Int) = tag <= TraitSetterName.tag - def extractorOfTag(tag: Int) = extractors(tag) val separatorToQualified: Map[String, QualifiedNameExtractor] = |