Skip to content

Commit 4ce52d0

Browse files
committed
Tweak to prefix printing
Don't leave out package prefixes under homogenizedView. We want to see them to make sure they are inserted in the same way before and after pickling. This discovered a problem in unpickler where package object prefixes were not correctly inserted back. Test case is pickleAlias.scala.
1 parent 7b018de commit 4ce52d0

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,11 +1013,20 @@ class TreeUnpickler(reader: TastyReader,
10131013
}
10141014
}
10151015

1016-
def completeSelect(name: Name, tpf: Type => NamedType): Select = {
1016+
def completeSelect(name: Name, sig: Signature): Select = {
10171017
val localCtx =
10181018
if (name == nme.CONSTRUCTOR) ctx.addMode(Mode.InSuperCall) else ctx
10191019
val qual = readTerm()(localCtx)
1020-
ConstFold(untpd.Select(qual, name).withType(tpf(qual.tpe.widenIfUnstable)))
1020+
var pre = qual.tpe.widenIfUnstable
1021+
val denot = accessibleDenot(pre, name, sig)
1022+
val owner = denot.symbol.maybeOwner
1023+
if (owner.isPackageObject && pre.termSymbol.is(Package))
1024+
pre = pre.select(owner.sourceModule)
1025+
val tpe = name match {
1026+
case name: TypeName => TypeRef(pre, name, denot)
1027+
case name: TermName => TermRef(pre, name, denot)
1028+
}
1029+
ConstFold(untpd.Select(qual, name).withType(tpe))
10211030
}
10221031

10231032
def readQualId(): (untpd.Ident, TypeRef) = {
@@ -1039,15 +1048,13 @@ class TreeUnpickler(reader: TastyReader,
10391048
case IDENTtpt =>
10401049
untpd.Ident(readName().toTypeName).withType(readType())
10411050
case SELECT =>
1042-
def readRest(name: TermName, sig: Signature): Tree =
1043-
completeSelect(name, pre => TermRef(pre, name, accessibleDenot(pre, name, sig)))
10441051
readName() match {
1045-
case SignedName(name, sig) => readRest(name, sig)
1046-
case name => readRest(name, Signature.NotAMethod)
1052+
case SignedName(name, sig) => completeSelect(name, sig)
1053+
case name => completeSelect(name, Signature.NotAMethod)
10471054
}
10481055
case SELECTtpt =>
10491056
val name = readName().toTypeName
1050-
completeSelect(name, pre => TypeRef(pre, name, accessibleDenot(pre, name, Signature.NotAMethod)))
1057+
completeSelect(name, Signature.NotAMethod)
10511058
case QUALTHIS =>
10521059
val (qual, tref) = readQualId()
10531060
untpd.This(qual).withType(ThisType.raw(tref))

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
109109
if (isOmittable(tp.cls)) return ""
110110
case tp @ TermRef(pre, _) =>
111111
val sym = tp.symbol
112-
if (sym.isPackageObject) return toTextPrefix(pre)
112+
if (sym.isPackageObject && !homogenizedView) return toTextPrefix(pre)
113113
if (isOmittable(sym)) return ""
114114
case _ =>
115115
}

tests/pos/pickleAlias.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object Test {
2+
throw new scala.Error()
3+
}

0 commit comments

Comments
 (0)