Skip to content

Commit 286aa4d

Browse files
committed
Allow pickling of general symbolic references
1 parent dd9a330 commit 286aa4d

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ class TreePickler(pickler: TastyPickler) {
5555

5656
private def pickleName(name: Name): Unit = writeNat(nameIndex(name).index)
5757

58+
private def pickleNameAndSig(name: Name, sig: Signature): Unit =
59+
pickleName(
60+
if (sig eq Signature.NotAMethod) name
61+
else SignedName(name.toTermName, sig))
62+
5863
private def pickleSymRef(sym: Symbol)(implicit ctx: Context) = symRefs.get(sym) match {
5964
case Some(label) =>
6065
if (label != NoAddr) writeRef(label) else pickleForwardSymRef(sym)
@@ -146,19 +151,23 @@ class TreePickler(pickler: TastyPickler) {
146151
writeByte(if (tpe.isType) TYPEREFdirect else TERMREFdirect)
147152
pickleSymRef(sym)
148153
}
149-
def pickleExternalRef(sym: Symbol) =
154+
def pickleExternalRef(sym: Symbol) = {
155+
def pickleCore() = {
156+
pickleNameAndSig(sym.name, tpe.signature)
157+
pickleType(tpe.prefix)
158+
}
150159
if (sym.is(Flags.Private)) {
151160
writeByte(if (tpe.isType) TYPEREFin else TERMREFin)
152161
withLength {
153-
pickleName(sym.name)
154-
pickleType(tpe.prefix)
162+
pickleCore()
155163
pickleType(sym.owner.typeRef)
156164
}
157165
}
158166
else {
159167
writeByte(if (tpe.isType) TYPEREF else TERMREF)
160-
pickleName(sym.name); pickleType(tpe.prefix)
168+
pickleCore()
161169
}
170+
}
162171
if (sym.is(Flags.Package)) {
163172
writeByte(if (tpe.isType) TYPEREFpkg else TERMREFpkg)
164173
pickleName(sym.fullName)
@@ -340,9 +349,7 @@ class TreePickler(pickler: TastyPickler) {
340349
case Select(qual, name) =>
341350
writeByte(if (name.isTypeName) SELECTtpt else SELECT)
342351
val sig = tree.tpe.signature
343-
pickleName(
344-
if (sig eq Signature.NotAMethod) name
345-
else SignedName(name.toTermName, sig))
352+
pickleNameAndSig(name, sig)
346353
pickleTree(qual)
347354
case Apply(fun, args) =>
348355
writeByte(APPLY)

0 commit comments

Comments
 (0)