aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/NameExtractors.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-27 21:47:07 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-11 09:33:11 +0200
commit1d6f5f7f33f9e4be29553cb7ef1e6f054a64dc6b (patch)
tree22f2b40e0c963280f183b026bc867284b217ceb6 /compiler/src/dotty/tools/dotc/core/NameExtractors.scala
parentea96ecda77ab99969a65b66173260e66b199be74 (diff)
downloaddotty-1d6f5f7f33f9e4be29553cb7ef1e6f054a64dc6b.tar.gz
dotty-1d6f5f7f33f9e4be29553cb7ef1e6f054a64dc6b.tar.bz2
dotty-1d6f5f7f33f9e4be29553cb7ef1e6f054a64dc6b.zip
Streamline pickling and unpickling of names
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/NameExtractors.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/NameExtractors.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala
index eaac30bf5..f84ee565d 100644
--- a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala
+++ b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala
@@ -7,9 +7,12 @@ import StdNames._
import util.DotClass
import tasty.TastyFormat._
import Decorators._
+import collection.mutable
object NameExtractors {
+ private val extractors = new mutable.HashMap[Int, ClassifiedNameExtractor]
+
abstract class NameInfo extends DotClass {
def tag: Int
def mkString(underlying: TermName): String
@@ -41,6 +44,7 @@ object NameExtractors {
case DerivedTermName(underlying, `info`) => Some(underlying)
case _ => None
}
+ extractors(tag) = this
}
class PrefixNameExtractor(tag: Int, prefix: String, infoString: String) extends ClassifiedNameExtractor(tag, infoString) {
@@ -73,8 +77,8 @@ object NameExtractors {
}
object AnyQualifiedName {
- def unapply(name: DerivedTermName): Option[(TermName, QualifiedNameExtractor # QualInfo)] = name match {
- case DerivedTermName(qual, info: QualifiedNameExtractor # QualInfo) =>
+ def unapply(name: DerivedTermName): Option[(TermName, QualifiedInfo)] = name match {
+ case DerivedTermName(qual, info: QualifiedInfo) =>
Some((name.underlying, info))
case _ => None
}
@@ -143,6 +147,8 @@ object NameExtractors {
def definesNewName(tag: Int) = tag <= TraitSetterName.tag
+ def extractorOfTag(tag: Int) = extractors(tag)
+
val separatorToQualified: Map[String, QualifiedNameExtractor] =
Map("." -> QualifiedName,
"$" -> FlattenedName,