Skip to content

Commit 1058278

Browse files
committed
Fix pickling/unpickling of names
Running the test suite with the pickling printer on showed up two more problems which are fixed in this commit.
1 parent e1ec747 commit 1058278

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

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

+7
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ object NameKinds {
141141
}
142142
}
143143

144+
object AnyNumberedName {
145+
def unapply(name: DerivedTermName): Option[(TermName, Int)] = name match {
146+
case DerivedTermName(qual, info: NumberedInfo) => Some((qual, info.num))
147+
case _ => None
148+
}
149+
}
150+
144151
case class UniqueNameKind(val separator: String)
145152
extends NumberedNameKind(UNIQUE, s"Unique $separator") {
146153
override def definesNewName = true

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class NameBuffer extends TastyBuffer(10000) {
4545
val lengthAddr = currentAddr
4646
for (i <- 0 until lengthWidth) writeByte(0)
4747
op
48-
val length = currentAddr.index - lengthAddr.index - 1
48+
val length = currentAddr.index - lengthAddr.index - lengthWidth
4949
putNat(lengthAddr, length, lengthWidth)
5050
}
5151

@@ -70,10 +70,10 @@ class NameBuffer extends TastyBuffer(10000) {
7070
writeNat(num)
7171
if (!original.isEmpty) writeNameRef(original)
7272
}
73-
case DefaultGetterName(method, paramNumber) =>
74-
withLength { writeNameRef(method); writeNat(paramNumber) }
7573
case VariantName(original, sign) =>
7674
withLength { writeNameRef(original); writeNat(sign + 1) }
75+
case AnyNumberedName(original, num) =>
76+
withLength { writeNameRef(original); writeNat(num) }
7777
case SignedName(original, Signature(params, result)) =>
7878
withLength(
7979
{ writeNameRef(original); writeNameRef(result); params.foreach(writeNameRef) },

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

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class TastyUnpickler(reader: TastyReader) {
6161
DefaultGetterName(readName(), readNat())
6262
case VARIANT =>
6363
VariantName(readName(), readNat() - 1)
64+
case OUTERSELECT =>
65+
OuterSelectName(readName(), readNat())
6466
case SIGNED =>
6567
val original = readName()
6668
val result = readName().toTypeName

0 commit comments

Comments
 (0)