Skip to content

Commit faad097

Browse files
committed
Make field names semantic
1 parent 35cb1a9 commit faad097

File tree

4 files changed

+12
-22
lines changed

4 files changed

+12
-22
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ object NameKinds {
249249
val ProtectedSetterName = new PrefixNameKind(PROTECTEDSETTER, "protected$set") // dubious encoding, kept for Scala2 compatibility
250250
val AvoidClashName = new SuffixNameKind(AVOIDCLASH, "$_avoid_name_clash_$")
251251
val DirectName = new SuffixNameKind(DIRECT, "$direct")
252+
val FieldName = new SuffixNameKind(FIELD, "$$local")
252253
val ModuleClassName = new SuffixNameKind(OBJECTCLASS, "$", optInfoString = "ModuleClass")
253254

254255
object SignedName extends NameKind(63) {

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

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ object NameOps {
6262
def isReplWrapperName = name.toSimpleName containsSlice INTERPRETER_IMPORT_WRAPPER
6363
def isSetterName = name endsWith SETTER_SUFFIX
6464
def isImportName = name startsWith IMPORT
65-
def isFieldName = name endsWith LOCAL_SUFFIX
6665
def isScala2LocalSuffix = name.endsWith(" ")
6766
def isModuleVarName(name: Name): Boolean =
6867
name.stripAnonNumberSuffix endsWith MODULE_VAR_SUFFIX
@@ -314,33 +313,22 @@ object NameOps {
314313
implicit class TermNameDecorator(val name: TermName) extends AnyVal {
315314
import nme._
316315

317-
def setterName: TermName =
318-
if (name.isFieldName) name.fieldToGetter.setterName
319-
else name ++ SETTER_SUFFIX
316+
def setterName: TermName = name.exclude(FieldName) ++ SETTER_SUFFIX
320317

321318
def getterName: TermName =
322-
if (name.isFieldName) fieldToGetter
323-
else setterToGetter
319+
name.exclude(FieldName).mapLast(n =>
320+
if (n.endsWith(SETTER_SUFFIX)) n.take(n.length - SETTER_SUFFIX.length).asSimpleName
321+
else n)
324322

325323
def fieldName: TermName =
326324
if (name.isSetterName) {
327325
if (name.is(TraitSetterName)) {
328-
val TraitSetterName(_, original) = name
326+
val TraitSetterName(_, original) = name
329327
original.fieldName
330328
}
331329
else getterName.fieldName
332330
}
333-
else name.mapLast(n => (n ++ LOCAL_SUFFIX).asSimpleName)
334-
335-
private def setterToGetter: TermName = {
336-
assert(name.endsWith(SETTER_SUFFIX), name + " is referenced as a setter but has wrong name format")
337-
name.mapLast(n => n.take(n.length - SETTER_SUFFIX.length).asSimpleName)
338-
}
339-
340-
def fieldToGetter: TermName = {
341-
assert(name.isFieldName)
342-
name.mapLast(n => n.take(n.length - LOCAL_SUFFIX.length).asSimpleName)
343-
}
331+
else FieldName(name)
344332

345333
/** Nominally, name from name$default$N, CONSTRUCTOR for <init> */
346334
def defaultGetterToMethod: TermName =

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,6 @@ object StdNames {
240240
val FAKE_LOCAL_THIS: N = "this$"
241241
val LAZY_FIELD_OFFSET: N = "OFFSET$"
242242
val LAZY_SLOW_SUFFIX: N = "$lzycompute"
243-
val LOCAL_SUFFIX: N = "$$local"
244243
val UNIVERSE_BUILD_PREFIX: N = "$u.build."
245244
val UNIVERSE_BUILD: N = "$u.build"
246245
val UNIVERSE_PREFIX: N = "$u."

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,11 @@ object TastyFormat {
233233
final val PROTECTEDSETTER = 22
234234
final val INITIALIZER = 23
235235
final val SHADOWED = 24
236-
final val AVOIDCLASH = 27
237-
final val DIRECT = 28
238-
final val OBJECTCLASS = 29
236+
final val AVOIDCLASH = 30
237+
final val DIRECT = 31
238+
final val FIELD = 32
239+
final val SETTER = 33
240+
final val OBJECTCLASS = 40
239241

240242
final val SIGNED = 63
241243
final val firstInternalTag = 64

0 commit comments

Comments
 (0)