Skip to content

Commit c599f7a

Browse files
committed
Drop Config.semanticNames option
We now handle only semantic names. Also, name extractor tags and TASTY name tags are now aligned.
1 parent 0ccc76e commit c599f7a

File tree

11 files changed

+97
-185
lines changed

11 files changed

+97
-185
lines changed

compiler/src/dotty/tools/dotc/config/Config.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ object Config {
1010

1111
final val checkCacheMembersNamed = false
1212

13-
final val semanticNames = true
14-
1513
/** When updating a constraint bound, check that the constrained parameter
1614
* does not appear at the top-level of either of its bounds.
1715
*/

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Names._
55
import NameOps._
66
import StdNames._
77
import util.DotClass
8+
import tasty.TastyFormat._
89

910
object NameExtractors {
1011

@@ -15,7 +16,7 @@ object NameExtractors {
1516
}
1617

1718
val simpleTermNameInfo = new NameInfo {
18-
def tag = 0
19+
def tag = UTF8
1920
def mkString(underlying: TermName): String = unsupported("mkString")
2021
}
2122

@@ -94,30 +95,30 @@ object NameExtractors {
9495
}
9596
}
9697

97-
object QualifiedName extends QualifiedNameExtractor(1, ".", "Qualified")
98-
object FlattenedName extends QualifiedNameExtractor(2, "$", "Flattened")
99-
object XpandedName extends QualifiedNameExtractor(3, str.EXPAND_SEPARATOR, "Expanded")
100-
object TraitSetterName extends QualifiedNameExtractor(4, str.TRAIT_SETTER_SEPARATOR, "TraitSetter")
98+
object QualifiedName extends QualifiedNameExtractor(QUALIFIED, ".", "Qualified")
99+
object FlattenedName extends QualifiedNameExtractor(FLATTENED, "$", "Flattened")
100+
object XpandedName extends QualifiedNameExtractor(EXPANDED, str.EXPAND_SEPARATOR, "Expanded")
101+
object TraitSetterName extends QualifiedNameExtractor(TRAITSETTER, str.TRAIT_SETTER_SEPARATOR, "TraitSetter")
101102

102-
object DefaultGetterName extends NumberedNameExtractor(5, "DefaultGetter") {
103+
object DefaultGetterName extends NumberedNameExtractor(DEFAULTGETTER, "DefaultGetter") {
103104
def mkString(underlying: TermName, info: ThisInfo) = {
104105
val prefix = if (underlying.isConstructorName) nme.DEFAULT_GETTER_INIT else underlying
105106
prefix.toString + nme.DEFAULT_GETTER + (info.num + 1)
106107
}
107108
}
108109

109-
object VariantName extends NumberedNameExtractor(6, "Variant") {
110+
object VariantName extends NumberedNameExtractor(VARIANT, "Variant") {
110111
val varianceToPrefix = Map(-1 -> '-', 0 -> '=', 1 -> '+')
111112
val prefixToVariance = Map('-' -> -1, '=' -> 0, '+' -> 1)
112113
def mkString(underlying: TermName, info: ThisInfo) = {
113114
varianceToPrefix(info.num).toString + underlying
114115
}
115116
}
116117

117-
val SuperAccessorName = new PrefixNameExtractor(7, str.SUPER_PREFIX, "SuperAccessor")
118-
val InitializerName = new PrefixNameExtractor(8, str.INITIALIZER_PREFIX, "Initializer")
119-
val ShadowedName = new PrefixNameExtractor(9, str.SHADOWED_PREFIX, "Shadowed")
120-
val ModuleClassName = new SuffixNameExtractor(10, "$", "ModuleClass")
118+
val SuperAccessorName = new PrefixNameExtractor(SUPERACCESSOR, str.SUPER_PREFIX, "SuperAccessor")
119+
val InitializerName = new PrefixNameExtractor(INITIALIZER, str.INITIALIZER_PREFIX, "Initializer")
120+
val ShadowedName = new PrefixNameExtractor(SHADOWED, str.SHADOWED_PREFIX, "Shadowed")
121+
val ModuleClassName = new SuffixNameExtractor(OBJECTCLASS, "$", "ModuleClass")
121122

122123
object SignedName extends NameExtractor(63) {
123124

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

Lines changed: 38 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,6 @@ object NameOps {
4949
}
5050
}
5151

52-
class PrefixNameExtractor(pre: TermName, bldr: NameExtractors.PrefixNameExtractor) {
53-
def apply(name: TermName): TermName =
54-
if (Config.semanticNames) bldr(name) else pre ++ name
55-
56-
def unapply(name: TermName): Option[TermName] =
57-
if (Config.semanticNames)
58-
name match {
59-
case bldr(original) => Some(original)
60-
case _ => None
61-
}
62-
else tryUnmangle(name)
63-
64-
def tryUnmangle(name: TermName): Option[TermName] =
65-
if (name startsWith pre) Some(name.drop(pre.length).asTermName)
66-
else None
67-
}
68-
69-
object SuperAccessorName extends PrefixNameExtractor(nme.SUPER_PREFIX, NameExtractors.SuperAccessorName)
70-
object InitializerName extends PrefixNameExtractor(nme.INITIALIZER_PREFIX, NameExtractors.InitializerName)
71-
7252
implicit class NameDecorator[N <: Name](val name: N) extends AnyVal {
7353
import nme._
7454

@@ -82,14 +62,8 @@ object NameOps {
8262
def isLoopHeaderLabel = (name startsWith WHILE_PREFIX) || (name startsWith DO_WHILE_PREFIX)
8363
def isProtectedAccessorName = name startsWith PROTECTED_PREFIX
8464
def isReplWrapperName = name.toSimpleName containsSlice INTERPRETER_IMPORT_WRAPPER
85-
def isTraitSetterName =
86-
if (Config.semanticNames) name.is(TraitSetterName)
87-
else name containsSlice TRAIT_SETTER_SEPARATOR
8865
def isSetterName = name endsWith SETTER_SUFFIX
8966
def isSingletonName = name endsWith SINGLETON_SUFFIX
90-
def isModuleClassName =
91-
if (Config.semanticNames) name.is(ModuleClassName)
92-
else name endsWith MODULE_SUFFIX
9367
def isAvoidClashName = name endsWith AVOID_CLASH_SUFFIX
9468
def isImportName = name startsWith IMPORT
9569
def isFieldName = name endsWith LOCAL_SUFFIX
@@ -137,19 +111,13 @@ object NameOps {
137111
}
138112

139113
/** Convert this module name to corresponding module class name */
140-
def moduleClassName: TypeName =
141-
if (Config.semanticNames) name.derived(ModuleClassName).toTypeName
142-
else (name ++ tpnme.MODULE_SUFFIX).toTypeName
114+
def moduleClassName: TypeName = name.derived(ModuleClassName).toTypeName
143115

144116
/** Convert this module class name to corresponding source module name */
145117
def sourceModuleName: TermName = stripModuleClassSuffix.toTermName
146118

147119
/** If name ends in module class suffix, drop it */
148-
def stripModuleClassSuffix: Name =
149-
if (isModuleClassName)
150-
if (Config.semanticNames) name.exclude(ModuleClassName)
151-
else name dropRight MODULE_SUFFIX.length
152-
else name
120+
def stripModuleClassSuffix: Name = name.exclude(ModuleClassName)
153121

154122
/** Append a suffix so that this name does not clash with another name in the same scope */
155123
def avoidClashName: TermName = (name ++ AVOID_CLASH_SUFFIX).toTermName
@@ -165,9 +133,7 @@ object NameOps {
165133
}.asInstanceOf[N]
166134

167135
/** The superaccessor for method with given name */
168-
def superName: TermName =
169-
if (Config.semanticNames) SuperAccessorName(name.toTermName)
170-
else (nme.SUPER_PREFIX ++ name).toTermName
136+
def superName: TermName = SuperAccessorName(name.toTermName)
171137

172138
/** The expanded name of `name` relative to given class `base`.
173139
*/
@@ -179,34 +145,24 @@ object NameOps {
179145
/** The expanded name of `name` relative to `basename` with given `separator`
180146
*/
181147
def expandedName(prefix: Name, separator: Name = nme.EXPAND_SEPARATOR): N =
182-
likeTyped(
183-
if (Config.semanticNames) {
184-
def qualify(name: SimpleTermName) =
185-
separatorToQualified(separator.toString)(prefix.toTermName, name)
186-
name rewrite {
187-
case name: SimpleTermName =>
188-
qualify(name)
189-
case AnyQualifiedName(_, _) =>
190-
// Note: an expanded name may itself be expanded. For example, look at javap of scala.App.initCode
191-
qualify(name.toSimpleName)
192-
}
148+
likeTyped {
149+
def qualify(name: SimpleTermName) =
150+
separatorToQualified(separator.toString)(prefix.toTermName, name)
151+
name rewrite {
152+
case name: SimpleTermName =>
153+
qualify(name)
154+
case AnyQualifiedName(_, _) =>
155+
// Note: an expanded name may itself be expanded. For example, look at javap of scala.App.initCode
156+
qualify(name.toSimpleName)
193157
}
194-
else prefix ++ separator ++ name)
158+
}
195159

196160
def expandedName(prefix: Name): N = expandedName(prefix, nme.EXPAND_SEPARATOR)
197161

198-
/** Revert the expanded name.
199-
* Note: This currently gives incorrect results
200-
* if the normal name contains `nme.EXPAND_SEPARATOR`, i.e. two consecutive '$'
201-
* signs. This can happen for instance if a super accessor is paired with
202-
* an encoded name, e.g. super$$plus$eq. See #765.
203-
*/
204-
def unexpandedName: N =
205-
if (Config.semanticNames)
206-
likeTyped {
207-
name.rewrite { case XpandedName(_, unexp) => unexp }
208-
}
209-
else unexpandedNameOfMangled
162+
/** Revert the expanded name. */
163+
def unexpandedName: N = likeTyped {
164+
name.rewrite { case XpandedName(_, unexp) => unexp }
165+
}
210166

211167
def unexpandedNameOfMangled: N = likeTyped {
212168
var idx = name.lastIndexOfSlice(nme.EXPAND_SEPARATOR)
@@ -219,25 +175,20 @@ object NameOps {
219175
if (idx < 0) name else (name drop (idx + nme.EXPAND_SEPARATOR.length))
220176
}
221177

222-
def expandedPrefix: N =
223-
if (Config.semanticNames)
224-
likeTyped {
225-
name.rewrite { case XpandedName(prefix, _) => prefix }
226-
}
227-
else expandedPrefixOfMangled
228-
178+
def expandedPrefix: N = likeTyped { name.exclude(XpandedName) }
179+
229180
def expandedPrefixOfMangled: N = {
230181
val idx = name.lastIndexOfSlice(nme.EXPAND_SEPARATOR)
231182
assert(idx >= 0)
232183
likeTyped(name.take(idx))
233184
}
234185

235186
def unmangleExpandedName: N =
236-
if (Config.semanticNames && name.isSimple) {
187+
if (name.isSimple) {
237188
val unmangled = unexpandedNameOfMangled
238189
if (name eq unmangled) name
239190
else likeTyped(
240-
XpandedName(expandedPrefixOfMangled.toTermName, unmangled.asSimpleName))
191+
XpandedName(expandedPrefixOfMangled.toTermName, unmangled.asSimpleName))
241192
}
242193
else name
243194

@@ -253,7 +204,7 @@ object NameOps {
253204

254205
def freshened(implicit ctx: Context): N =
255206
likeTyped(
256-
if (name.isModuleClassName) name.stripModuleClassSuffix.freshened.moduleClassName
207+
if (name.is(ModuleClassName)) name.stripModuleClassSuffix.freshened.moduleClassName
257208
else likeTyped(ctx.freshName(name ++ NameTransformer.NAME_JOIN_STRING)))
258209
/*
259210
/** Name with variance prefix: `+` for covariant, `-` for contravariant */
@@ -283,7 +234,7 @@ object NameOps {
283234
284235
*/
285236
def unmangleClassName: N =
286-
if (Config.semanticNames && name.isSimple && name.isTypeName)
237+
if (name.isSimple && name.isTypeName)
287238
if (name.endsWith(MODULE_SUFFIX) && !tpnme.falseModuleClassNames.contains(name.asTypeName))
288239
likeTyped(name.dropRight(MODULE_SUFFIX.length).moduleClassName)
289240
else name
@@ -439,18 +390,11 @@ object NameOps {
439390

440391
def fieldName: TermName =
441392
if (name.isSetterName) {
442-
if (name.isTraitSetterName) {
443-
if (Config.semanticNames) {
444-
val TraitSetterName(_, original) = name
445-
original.fieldName
446-
}
447-
else {
448-
// has form <$-separated-trait-name>$_setter_$ `name`_$eq
449-
val start = name.indexOfSlice(TRAIT_SETTER_SEPARATOR) + TRAIT_SETTER_SEPARATOR.length
450-
val end = name.indexOfSlice(SETTER_SUFFIX)
451-
(name.slice(start, end) ++ LOCAL_SUFFIX).asTermName
452-
}
453-
} else getterName.fieldName
393+
if (name.is(TraitSetterName)) {
394+
val TraitSetterName(_, original) = name
395+
original.fieldName
396+
}
397+
else getterName.fieldName
454398
}
455399
else name.mapLast(n => (n ++ LOCAL_SUFFIX).asSimpleName)
456400

@@ -469,19 +413,13 @@ object NameOps {
469413
* @note Default getter name suffixes start at 1, so `pos` has to be adjusted by +1
470414
*/
471415
def defaultGetterName(pos: Int): TermName =
472-
if (Config.semanticNames) DefaultGetterName(name, pos)
473-
else {
474-
val prefix = if (name.isConstructorName) DEFAULT_GETTER_INIT else name
475-
prefix ++ DEFAULT_GETTER ++ (pos + 1).toString
476-
}
416+
DefaultGetterName(name, pos)
477417

478418
/** Nominally, name from name$default$N, CONSTRUCTOR for <init> */
479419
def defaultGetterToMethod: TermName =
480-
if (Config.semanticNames)
481-
name rewrite {
482-
case DefaultGetterName(methName, _) => methName
483-
}
484-
else defaultGetterToMethodOfMangled
420+
name rewrite {
421+
case DefaultGetterName(methName, _) => methName
422+
}
485423

486424
def defaultGetterToMethodOfMangled: TermName = {
487425
val p = name.indexOfSlice(DEFAULT_GETTER)
@@ -494,11 +432,9 @@ object NameOps {
494432

495433
/** If this is a default getter, its index (starting from 0), else -1 */
496434
def defaultGetterIndex: Int =
497-
if (Config.semanticNames)
498-
name collect {
499-
case DefaultGetterName(_, num) => num
500-
} getOrElse -1
501-
else defaultGetterIndexOfMangled
435+
name collect {
436+
case DefaultGetterName(_, num) => num
437+
} getOrElse -1
502438

503439
def defaultGetterIndexOfMangled: Int = {
504440
var i = name.length
@@ -590,21 +526,16 @@ object NameOps {
590526
def inlineAccessorName = nme.INLINE_ACCESSOR_PREFIX ++ name ++ "$"
591527

592528
def unmangleMethodName: TermName =
593-
if (Config.semanticNames && name.isSimple) {
529+
if (name.isSimple) {
594530
val idx = name.defaultGetterIndexOfMangled
595531
if (idx >= 0) name.defaultGetterToMethodOfMangled.defaultGetterName(idx)
596532
else name
597533
}
598534
else name
599535

600536
def unmangleSuperName: TermName =
601-
if (Config.semanticNames && name.isSimple)
602-
SuperAccessorName.tryUnmangle(name.lastPart) match {
603-
case scala.Some(original) =>
604-
SuperAccessorName(name.mapLast(_ => original.asSimpleName))
605-
case None =>
606-
name
607-
}
537+
if (name.isSimple && name.startsWith(str.SUPER_PREFIX))
538+
SuperAccessorName(name.drop(str.SUPER_PREFIX.length).asTermName)
608539
else name
609540
}
610541

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ object SymDenotations {
406406
}
407407
var prefix = encl.fullNameSeparated(separator)
408408
val fn =
409-
if (Config.semanticNames && separatorToQualified.contains(sep)) {
409+
if (separatorToQualified.contains(sep)) {
410410
if (sep == "$")
411411
// duplicate scalac's behavior: don't write a double '$$' for module class members.
412412
prefix = prefix.exclude(ModuleClassName)
@@ -1233,7 +1233,7 @@ object SymDenotations {
12331233
// ----- denotation fields and accessors ------------------------------
12341234

12351235
if (initFlags is (Module, butNot = Package))
1236-
assert(name.isModuleClassName, s"module naming inconsistency: ${name.debugString}")
1236+
assert(name.is(ModuleClassName), s"module naming inconsistency: ${name.debugString}")
12371237

12381238
/** The symbol asserted to have type ClassSymbol */
12391239
def classSymbol: ClassSymbol = symbol.asInstanceOf[ClassSymbol]

compiler/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package classfile
55

66
import Contexts._, Symbols._, Types._, Names._, StdNames._, NameOps._, Scopes._, Decorators._
77
import SymDenotations._, unpickleScala2.Scala2Unpickler._, Constants._, Annotations._, util.Positions._
8+
import NameExtractors.ModuleClassName
89
import ast.tpd._
910
import java.io.{ File, IOException }
1011
import java.lang.Integer.toHexString
@@ -950,7 +951,7 @@ class ClassfileParser(
950951
val start = starts(index)
951952
if (in.buf(start).toInt != CONSTANT_CLASS) errorBadTag(start)
952953
val name = getExternalName(in.getChar(start + 1))
953-
if (name.isModuleClassName && (name ne nme.nothingRuntimeClass) && (name ne nme.nullRuntimeClass))
954+
if (name.is(ModuleClassName) && (name ne nme.nothingRuntimeClass) && (name ne nme.nullRuntimeClass))
954955
// Null$ and Nothing$ ARE classes
955956
c = ctx.requiredModule(name.sourceModuleName)
956957
else c = classNameToSymbol(name)

0 commit comments

Comments
 (0)