diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-27 21:47:07 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-11 09:33:11 +0200 |
commit | 1d6f5f7f33f9e4be29553cb7ef1e6f054a64dc6b (patch) | |
tree | 22f2b40e0c963280f183b026bc867284b217ceb6 /compiler/src/dotty/tools/dotc/core/NameExtractors.scala | |
parent | ea96ecda77ab99969a65b66173260e66b199be74 (diff) | |
download | dotty-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.scala | 10 |
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, |