Skip to content

Commit 1db196d

Browse files
committed
Streamline pickling and unpickling of names
1 parent d81250e commit 1db196d

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ import StdNames._
77
import util.DotClass
88
import tasty.TastyFormat._
99
import Decorators._
10+
import collection.mutable
1011

1112
object NameExtractors {
1213

14+
private val extractors = new mutable.HashMap[Int, ClassifiedNameExtractor]
15+
1316
abstract class NameInfo extends DotClass {
1417
def tag: Int
1518
def mkString(underlying: TermName): String
@@ -41,6 +44,7 @@ object NameExtractors {
4144
case DerivedTermName(underlying, `info`) => Some(underlying)
4245
case _ => None
4346
}
47+
extractors(tag) = this
4448
}
4549

4650
class PrefixNameExtractor(tag: Int, prefix: String, infoString: String) extends ClassifiedNameExtractor(tag, infoString) {
@@ -73,8 +77,8 @@ object NameExtractors {
7377
}
7478

7579
object AnyQualifiedName {
76-
def unapply(name: DerivedTermName): Option[(TermName, QualifiedNameExtractor # QualInfo)] = name match {
77-
case DerivedTermName(qual, info: QualifiedNameExtractor # QualInfo) =>
80+
def unapply(name: DerivedTermName): Option[(TermName, QualifiedInfo)] = name match {
81+
case DerivedTermName(qual, info: QualifiedInfo) =>
7882
Some((name.underlying, info))
7983
case _ => None
8084
}
@@ -143,6 +147,8 @@ object NameExtractors {
143147

144148
def definesNewName(tag: Int) = tag <= TraitSetterName.tag
145149

150+
def extractorOfTag(tag: Int) = extractors(tag)
151+
146152
val separatorToQualified: Map[String, QualifiedNameExtractor] =
147153
Map("." -> QualifiedName,
148154
"$" -> FlattenedName,

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,26 +58,18 @@ class NameBuffer extends TastyBuffer(10000) {
5858
else Codec.toUTF8(chrs, name.start, name.length)
5959
writeNat(bytes.length)
6060
writeBytes(bytes, bytes.length)
61-
case QualifiedName(qualified, selector) =>
62-
withLength { writeNameRef(qualified); writeNameRef(selector) }
63-
case FlattenedName(qualified, selector) =>
64-
withLength { writeNameRef(qualified); writeNameRef(selector) }
65-
case ExpandedName(prefix, original) =>
66-
withLength { writeNameRef(prefix); writeNameRef(original) }
61+
case AnyQualifiedName(prefix, info) =>
62+
withLength { writeNameRef(prefix); writeNameRef(info.name) }
6763
case SignedName(original, Signature(params, result)) =>
6864
withLength(
6965
{ writeNameRef(original); writeNameRef(result); params.foreach(writeNameRef) },
7066
if ((params.length + 2) * maxIndexWidth <= maxNumInByte) 1 else 2)
71-
case ModuleClassName(module) =>
72-
withLength { writeNameRef(module) }
73-
case SuperAccessorName(accessed) =>
74-
withLength { writeNameRef(accessed) }
7567
case DefaultGetterName(method, paramNumber) =>
7668
withLength { writeNameRef(method); writeNat(paramNumber) }
77-
case ShadowedName(original) =>
78-
withLength { writeNameRef(original) }
7969
case VariantName(original, sign) =>
8070
withLength { writeNameRef(original); writeNat(sign + 1) }
71+
case DerivedTermName(original, info) =>
72+
withLength { writeNameRef(original) }
8173
}
8274
}
8375

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,19 @@ class TastyUnpickler(reader: TastyReader) {
5555
FlattenedName(readName(), readName().asSimpleName)
5656
case EXPANDED =>
5757
ExpandedName(readName(), readName().asSimpleName)
58+
case DEFAULTGETTER =>
59+
DefaultGetterName(readName(), readNat())
60+
case VARIANT =>
61+
VariantName(readName(), readNat() - 1)
5862
case SIGNED =>
5963
val original = readName()
6064
val result = readName().toTypeName
6165
val params = until(end)(readName().toTypeName)
6266
var sig = Signature(params, result)
6367
if (sig == Signature.NotAMethod) sig = Signature.NotAMethod
6468
SignedName(original, sig)
65-
case OBJECTCLASS =>
66-
ModuleClassName(readName())
67-
case SUPERACCESSOR =>
68-
SuperAccessorName(readName())
69-
case DEFAULTGETTER =>
70-
DefaultGetterName(readName(), readNat())
71-
case SHADOWED =>
72-
ShadowedName(readName())
73-
case VARIANT =>
74-
VariantName(readName(), readNat() - 1)
69+
case _ =>
70+
extractorOfTag(tag)(readName())
7571
}
7672
assert(currentAddr == end, s"bad name $result $start $currentAddr $end")
7773
result

0 commit comments

Comments
 (0)