aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-04-06 15:34:09 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-11 09:33:12 +0200
commit800b1ad042044d8902c76fe353f7adf0491b5f20 (patch)
tree27a99202c4b2922ef4e7f6d3f9ce58f4e6a819be
parentb17af4b7abfa1de2a0099329a7e7148cabafbab0 (diff)
downloaddotty-800b1ad042044d8902c76fe353f7adf0491b5f20.tar.gz
dotty-800b1ad042044d8902c76fe353f7adf0491b5f20.tar.bz2
dotty-800b1ad042044d8902c76fe353f7adf0491b5f20.zip
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.
-rw-r--r--compiler/src/dotty/tools/dotc/core/NameKinds.scala7
-rw-r--r--compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala6
-rw-r--r--compiler/src/dotty/tools/dotc/core/tasty/TastyUnpickler.scala2
3 files changed, 12 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameKinds.scala b/compiler/src/dotty/tools/dotc/core/NameKinds.scala
index c34a100a8..bee39adaa 100644
--- a/compiler/src/dotty/tools/dotc/core/NameKinds.scala
+++ b/compiler/src/dotty/tools/dotc/core/NameKinds.scala
@@ -141,6 +141,13 @@ object NameKinds {
}
}
+ object AnyNumberedName {
+ def unapply(name: DerivedTermName): Option[(TermName, Int)] = name match {
+ case DerivedTermName(qual, info: NumberedInfo) => Some((qual, info.num))
+ case _ => None
+ }
+ }
+
case class UniqueNameKind(val separator: String)
extends NumberedNameKind(UNIQUE, s"Unique $separator") {
override def definesNewName = true
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala b/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
index 7ee6427f3..270d6be56 100644
--- a/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
+++ b/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
@@ -45,7 +45,7 @@ class NameBuffer extends TastyBuffer(10000) {
val lengthAddr = currentAddr
for (i <- 0 until lengthWidth) writeByte(0)
op
- val length = currentAddr.index - lengthAddr.index - 1
+ val length = currentAddr.index - lengthAddr.index - lengthWidth
putNat(lengthAddr, length, lengthWidth)
}
@@ -70,10 +70,10 @@ class NameBuffer extends TastyBuffer(10000) {
writeNat(num)
if (!original.isEmpty) writeNameRef(original)
}
- case DefaultGetterName(method, paramNumber) =>
- withLength { writeNameRef(method); writeNat(paramNumber) }
case VariantName(original, sign) =>
withLength { writeNameRef(original); writeNat(sign + 1) }
+ case AnyNumberedName(original, num) =>
+ withLength { writeNameRef(original); writeNat(num) }
case SignedName(original, Signature(params, result)) =>
withLength(
{ writeNameRef(original); writeNameRef(result); params.foreach(writeNameRef) },
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TastyUnpickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TastyUnpickler.scala
index 835222727..37a3c2e76 100644
--- a/compiler/src/dotty/tools/dotc/core/tasty/TastyUnpickler.scala
+++ b/compiler/src/dotty/tools/dotc/core/tasty/TastyUnpickler.scala
@@ -61,6 +61,8 @@ class TastyUnpickler(reader: TastyReader) {
DefaultGetterName(readName(), readNat())
case VARIANT =>
VariantName(readName(), readNat() - 1)
+ case OUTERSELECT =>
+ OuterSelectName(readName(), readNat())
case SIGNED =>
val original = readName()
val result = readName().toTypeName