Skip to content

Commit 81ab201

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 2eb9c31 commit 81ab201

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

+14-7
Original file line numberDiff line numberDiff line change
@@ -1015,11 +1015,20 @@ class TreeUnpickler(reader: TastyReader,
10151015
}
10161016
}
10171017

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

10251034
def readQualId(): (untpd.Ident, TypeRef) = {
@@ -1041,15 +1050,13 @@ class TreeUnpickler(reader: TastyReader,
10411050
case IDENTtpt =>
10421051
untpd.Ident(readName().toTypeName).withType(readType())
10431052
case SELECT =>
1044-
def readRest(name: TermName, sig: Signature): Tree =
1045-
completeSelect(name, pre => TermRef(pre, name, accessibleDenot(pre, name, sig)))
10461053
readName() match {
1047-
case SignedName(name, sig) => readRest(name, sig)
1048-
case name => readRest(name, Signature.NotAMethod)
1054+
case SignedName(name, sig) => completeSelect(name, sig)
1055+
case name => completeSelect(name, Signature.NotAMethod)
10491056
}
10501057
case SELECTtpt =>
10511058
val name = readName().toTypeName
1052-
completeSelect(name, pre => TypeRef(pre, name, accessibleDenot(pre, name, Signature.NotAMethod)))
1059+
completeSelect(name, Signature.NotAMethod)
10531060
case QUALTHIS =>
10541061
val (qual, tref) = readQualId()
10551062
untpd.This(qual).withType(ThisType.raw(tref))

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

+1-1
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

+3
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)