Skip to content

Commit 25d37d0

Browse files
committed
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.
1 parent af9fabb commit 25d37d0

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

compiler/src/dotty/tools/dotc/core/NameExtractors.scala

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ object NameExtractors {
1616

1717
abstract class NameInfo extends DotClass {
1818
def tag: Int
19+
def definesNewName: Boolean = false
1920
def mkString(underlying: TermName): String
2021
def map(f: SimpleTermName => SimpleTermName): NameInfo = this
2122
}
@@ -64,6 +65,7 @@ object NameExtractors {
6465
abstract class QualifiedNameExtractor(tag: Int, val separator: String, val infoString: String) extends NameExtractor(tag) {
6566
type ThisInfo = QualInfo
6667
case class QualInfo(val name: SimpleTermName) extends Info with QualifiedInfo {
68+
override def definesNewName = true
6769
override def map(f: SimpleTermName => SimpleTermName): NameInfo = new QualInfo(f(name))
6870
override def toString = s"$infoString $name"
6971
}
@@ -89,9 +91,10 @@ object NameExtractors {
8991
def num: Int
9092
}
9193

92-
abstract class NumberedNameExtractor(tag: Int, val infoString: String) extends NameExtractor(tag) {
94+
abstract class NumberedNameExtractor(tag: Int, val infoString: String) extends NameExtractor(tag) { self =>
9395
type ThisInfo = NumberedInfo
9496
case class NumberedInfo(val num: Int) extends Info with NameExtractors.NumberedInfo {
97+
override def definesNewName = self.definesNewName
9598
override def toString = s"$infoString $num"
9699
}
97100
def apply(qual: TermName, num: Int) =
@@ -100,6 +103,14 @@ object NameExtractors {
100103
case DerivedTermName(underlying, info: this.NumberedInfo) => Some((underlying, info.num))
101104
case _ => None
102105
}
106+
def definesNewName = false
107+
}
108+
109+
class UniqueNameExtractor(sep: String) extends NumberedNameExtractor(UNIQUE, "Unique") {
110+
val separator = if (sep.isEmpty) "$" else sep
111+
override def definesNewName = !sep.isEmpty
112+
def mkString(underlying: TermName, info: ThisInfo) =
113+
underlying.toString + separator + info.num
103114
}
104115

105116
object QualifiedName extends QualifiedNameExtractor(QUALIFIED, ".", "Qualified")
@@ -148,8 +159,6 @@ object NameExtractors {
148159
def infoString: String = "Signed"
149160
}
150161

151-
def definesNewName(tag: Int) = tag <= TraitSetterName.tag
152-
153162
def extractorOfTag(tag: Int) = extractors(tag)
154163

155164
val separatorToQualified: Map[String, QualifiedNameExtractor] =

compiler/src/dotty/tools/dotc/core/Names.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ object Names {
175175
*/
176176
def derived(info: NameInfo): TermName = {
177177
val ownTag = this.info.tag
178-
if (ownTag < info.tag || definesNewName(info.tag)) add(info)
178+
if (ownTag < info.tag || info.definesNewName) add(info)
179179
else if (ownTag > info.tag) rewrap(underlying.derived(info))
180180
else {
181181
assert(info == this.info)
@@ -185,15 +185,15 @@ object Names {
185185

186186
def exclude(kind: NameExtractor): TermName = {
187187
val ownTag = this.info.tag
188-
if (ownTag < kind.tag || definesNewName(ownTag)) this
188+
if (ownTag < kind.tag || info.definesNewName) this
189189
else if (ownTag > kind.tag) rewrap(underlying.exclude(kind))
190190
else underlying
191191
}
192192

193193
def is(kind: NameExtractor): Boolean = {
194194
val ownTag = this.info.tag
195195
ownTag == kind.tag ||
196-
!definesNewName(ownTag) && ownTag > kind.tag && underlying.is(kind)
196+
!info.definesNewName && ownTag > kind.tag && underlying.is(kind)
197197
}
198198

199199
override def hashCode = System.identityHashCode(this)

compiler/src/dotty/tools/dotc/core/tasty/TastyFormat.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,9 @@ object TastyFormat {
224224
final val FLATTENED = 3
225225
final val EXPANDED = 4
226226
final val TRAITSETTER = 5
227-
final val DEFAULTGETTER = 10
228-
final val VARIANT = 11
227+
final val UNIQUE = 10
228+
final val DEFAULTGETTER = 11
229+
final val VARIANT = 12
229230
final val SUPERACCESSOR = 20
230231
final val INITIALIZER = 21
231232
final val SHADOWED = 22

0 commit comments

Comments
 (0)