Skip to content

Commit 928aa20

Browse files
committed
Pickle signatures using qualified names.
Would like to do use more semantic names in pickled file, but it's hard without having semantic names to start with.
1 parent 1ea86fc commit 928aa20

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/dotty/tools/dotc/core/pickling/NameBuffer.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ class NameBuffer extends TastyBuffer(100000) {
3232

3333
def nameIndex(str: String): NameRef = nameIndex(str.toTermName)
3434

35+
def fullNameIndex(name: Name): NameRef = {
36+
val pos = name.lastIndexOf('.')
37+
if (pos > 0)
38+
nameIndex(Qualified(fullNameIndex(name.take(pos)), nameIndex(name.drop(pos + 1))))
39+
else
40+
nameIndex(name)
41+
}
42+
3543
private def withLength(op: => Unit): Unit = {
3644
val lengthAddr = currentAddr
3745
writeByte(0)

src/dotty/tools/dotc/core/pickling/TreePickler.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class TreePickler(pickler: TastyPickler) {
1414
val buf = new TreeBuffer
1515
pickler.newSection("ASTs", buf)
1616
import buf._
17-
import pickler.nameBuffer.nameIndex
17+
import pickler.nameBuffer.{nameIndex, fullNameIndex}
1818
import ast.tpd._
1919

2020
private val symRefs = new mutable.HashMap[Symbol, Addr]
@@ -61,7 +61,7 @@ class TreePickler(pickler: TastyPickler) {
6161
private def pickleName(name: TastyName) = writeNat(nameIndex(name).index)
6262
private def pickleNameAndSig(name: Name, sig: Signature) = {
6363
val Signature(params, result) = sig
64-
pickleName(TastyName.Signed(nameIndex(name), params.map(nameIndex), nameIndex(result)))
64+
pickleName(TastyName.Signed(nameIndex(name), params.map(fullNameIndex), fullNameIndex(result)))
6565
}
6666

6767
private def pickleSymRef(sym: Symbol)(implicit ctx: Context) = symRefs.get(sym) match {

0 commit comments

Comments
 (0)