Skip to content

Commit 7219569

Browse files
committed
Eliminate designatorName
1 parent a579e5e commit 7219569

File tree

2 files changed

+27
-24
lines changed

2 files changed

+27
-24
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,8 +1501,6 @@ object Types {
15011501
private[this] var myName: ThisName = _
15021502
private[this] var mySig: Signature = null
15031503

1504-
def designatorName: Name = designator.asInstanceOf[Name] // ### todo: remove
1505-
15061504
private[dotc] def init()(implicit ctx: Context): this.type = {
15071505
(designator: Designator) match { // dotty shortcoming: need the upcast
15081506
case DerivedName(underlying, info: SignedName.SignedInfo) =>
@@ -1923,7 +1921,10 @@ object Types {
19231921
* the public name.
19241922
*/
19251923
def shadowed(implicit ctx: Context): NamedType =
1926-
NamedType(prefix, designatorName.derived(ShadowedName))
1924+
designator match {
1925+
case designator: Symbol => this
1926+
case designator: Name => NamedType(prefix, designator.derived(ShadowedName))
1927+
}
19271928

19281929
override def equals(that: Any) = that match {
19291930
case that: NamedType =>

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

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -144,39 +144,41 @@ class TreePickler(pickler: TastyPickler) {
144144
pickleConstant(value)
145145
case tpe: NamedType =>
146146
val sym = tpe.symbol
147-
def pickleDirectRef() = {
148-
writeByte(if (tpe.isType) TYPEREFdirect else TERMREFdirect)
149-
pickleSymRef(sym)
150-
}
151147
if (sym.is(Flags.Package)) {
152148
writeByte(if (tpe.isType) TYPEREFpkg else TERMREFpkg)
153149
pickleName(sym.fullName)
154150
}
155-
else if (sym is Flags.BindDefinedType) {
156-
registerDef(sym)
157-
writeByte(BIND)
158-
withLength {
159-
pickleName(sym.name)
160-
pickleType(sym.info)
161-
pickleDirectRef()
162-
}
163-
}
164151
else if (tpe.prefix == NoPrefix) {
165-
pickleDirectRef()
152+
def pickleDirectRef() = {
153+
writeByte(if (tpe.isType) TYPEREFdirect else TERMREFdirect)
154+
pickleSymRef(sym)
155+
}
156+
if (sym is Flags.BindDefinedType) {
157+
registerDef(sym)
158+
writeByte(BIND)
159+
withLength {
160+
pickleName(sym.name)
161+
pickleType(sym.info)
162+
pickleDirectRef()
163+
}
164+
}
165+
else pickleDirectRef()
166166
}
167167
else if (isLocallyDefined(sym)) {
168168
writeByte(if (tpe.isType) TYPEREFsymbol else TERMREFsymbol)
169169
pickleSymRef(sym); pickleType(tpe.prefix)
170170
}
171-
else if (tpe.hasFixedSym) {
172-
assert(tpe.symbol.isClass && tpe.symbol.is(Flags.Scala2x), tpe.symbol.showLocated)
173-
writeByte(TYPEREF) // should be changed to a new entry that keeps track of prefix, symbol & owner
174-
pickleName(tpe.name)
175-
pickleType(tpe.prefix)
176-
}
177171
else {
172+
val name = tpe.designator match {
173+
case designator: Symbol =>
174+
assert(tpe.symbol.isClass && tpe.symbol.is(Flags.Scala2x), tpe.symbol.showLocated)
175+
// Note: vulnerability here, since Scala2x allows several classes with same name and prefix
176+
designator.name
177+
case designator: Name =>
178+
designator
179+
}
178180
writeByte(if (tpe.isType) TYPEREF else TERMREF)
179-
pickleName(tpe.designatorName); pickleType(tpe.prefix)
181+
pickleName(name); pickleType(tpe.prefix)
180182
}
181183
case tpe: ThisType =>
182184
if (tpe.cls.is(Flags.Package) && !tpe.cls.isEffectiveRoot) {

0 commit comments

Comments
 (0)