Skip to content

Commit 9649b6c

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 2035aa7 commit 9649b6c

File tree

12 files changed

+99
-196
lines changed

12 files changed

+99
-196
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,11 +204,11 @@ 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
def unmangleClassName: N =
260-
if (Config.semanticNames && name.isSimple && name.isTypeName)
211+
if (name.isSimple && name.isTypeName)
261212
if (name.endsWith(MODULE_SUFFIX) && !tpnme.falseModuleClassNames.contains(name.asTypeName))
262213
likeTyped(name.dropRight(MODULE_SUFFIX.length).moduleClassName)
263214
else name
@@ -413,18 +364,11 @@ object NameOps {
413364

414365
def fieldName: TermName =
415366
if (name.isSetterName) {
416-
if (name.isTraitSetterName) {
417-
if (Config.semanticNames) {
418-
val TraitSetterName(_, original) = name
419-
original.fieldName
420-
}
421-
else {
422-
// has form <$-separated-trait-name>$_setter_$ `name`_$eq
423-
val start = name.indexOfSlice(TRAIT_SETTER_SEPARATOR) + TRAIT_SETTER_SEPARATOR.length
424-
val end = name.indexOfSlice(SETTER_SUFFIX)
425-
(name.slice(start, end) ++ LOCAL_SUFFIX).asTermName
426-
}
427-
} else getterName.fieldName
367+
if (name.is(TraitSetterName)) {
368+
val TraitSetterName(_, original) = name
369+
original.fieldName
370+
}
371+
else getterName.fieldName
428372
}
429373
else name.mapLast(n => (n ++ LOCAL_SUFFIX).asSimpleName)
430374

@@ -443,19 +387,13 @@ object NameOps {
443387
* @note Default getter name suffixes start at 1, so `pos` has to be adjusted by +1
444388
*/
445389
def defaultGetterName(pos: Int): TermName =
446-
if (Config.semanticNames) DefaultGetterName(name, pos)
447-
else {
448-
val prefix = if (name.isConstructorName) DEFAULT_GETTER_INIT else name
449-
prefix ++ DEFAULT_GETTER ++ (pos + 1).toString
450-
}
390+
DefaultGetterName(name, pos)
451391

452392
/** Nominally, name from name$default$N, CONSTRUCTOR for <init> */
453393
def defaultGetterToMethod: TermName =
454-
if (Config.semanticNames)
455-
name rewrite {
456-
case DefaultGetterName(methName, _) => methName
457-
}
458-
else defaultGetterToMethodOfMangled
394+
name rewrite {
395+
case DefaultGetterName(methName, _) => methName
396+
}
459397

460398
def defaultGetterToMethodOfMangled: TermName = {
461399
val p = name.indexOfSlice(DEFAULT_GETTER)
@@ -468,11 +406,9 @@ object NameOps {
468406

469407
/** If this is a default getter, its index (starting from 0), else -1 */
470408
def defaultGetterIndex: Int =
471-
if (Config.semanticNames)
472-
name collect {
473-
case DefaultGetterName(_, num) => num
474-
} getOrElse -1
475-
else defaultGetterIndexOfMangled
409+
name collect {
410+
case DefaultGetterName(_, num) => num
411+
} getOrElse -1
476412

477413
def defaultGetterIndexOfMangled: Int = {
478414
var i = name.length
@@ -564,21 +500,16 @@ object NameOps {
564500
def inlineAccessorName = nme.INLINE_ACCESSOR_PREFIX ++ name ++ "$"
565501

566502
def unmangleMethodName: TermName =
567-
if (Config.semanticNames && name.isSimple) {
503+
if (name.isSimple) {
568504
val idx = name.defaultGetterIndexOfMangled
569505
if (idx >= 0) name.defaultGetterToMethodOfMangled.defaultGetterName(idx)
570506
else name
571507
}
572508
else name
573509

574510
def unmangleSuperName: TermName =
575-
if (Config.semanticNames && name.isSimple)
576-
SuperAccessorName.tryUnmangle(name.lastPart) match {
577-
case scala.Some(original) =>
578-
SuperAccessorName(name.mapLast(_ => original.asSimpleName))
579-
case None =>
580-
name
581-
}
511+
if (name.isSimple && name.startsWith(str.SUPER_PREFIX))
512+
SuperAccessorName(name.drop(str.SUPER_PREFIX.length).asTermName)
582513
else name
583514
}
584515

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ object SymDenotations {
401401
}
402402
var prefix = encl.fullNameSeparated(separator)
403403
val fn =
404-
if (Config.semanticNames && separatorToQualified.contains(sep)) {
404+
if (separatorToQualified.contains(sep)) {
405405
if (sep == "$")
406406
// duplicate scalac's behavior: don't write a double '$$' for module class members.
407407
prefix = prefix.exclude(ModuleClassName)
@@ -1229,7 +1229,7 @@ object SymDenotations {
12291229
// ----- denotation fields and accessors ------------------------------
12301230

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

12341234
/** The symbol asserted to have type ClassSymbol */
12351235
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)