diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-23 17:14:39 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-11 09:33:10 +0200 |
commit | c27cbd16e6fd3cc00e603aebef95f477684b3390 (patch) | |
tree | 5a2a039e2249812253014ddd5fe4381ad817dd53 /compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala | |
parent | bbc84eabcd244179299ad435b6e9d7473e5ff892 (diff) | |
download | dotty-c27cbd16e6fd3cc00e603aebef95f477684b3390.tar.gz dotty-c27cbd16e6fd3cc00e603aebef95f477684b3390.tar.bz2 dotty-c27cbd16e6fd3cc00e603aebef95f477684b3390.zip |
Bug fixes
nameddefaults.scala now compiles without crashing
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala b/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala index b05e6ef21..f1f03dd3c 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/NameBuffer.scala @@ -4,7 +4,7 @@ package core package tasty import collection.mutable -import Names.{Name, chrs} +import Names.{Name, chrs, DerivedTermName, SimpleTermName} import Decorators._, NameOps._ import TastyBuffer._ import scala.io.Codec @@ -24,21 +24,31 @@ class NameBuffer extends TastyBuffer(10000) { nameRefs(name) = ref ref } - def nameIndex(name: Name): NameRef = { - val tname = - if (name.isShadowedName) Shadowed(nameIndex(name.revertShadowed)) - else Simple(name.toTermName.toSimpleName) + + def nameIndex(name: Name, toTasty: SimpleTermName => TastyName): NameRef = { + val tname = name.toTermName match { + case DerivedTermName(name1, NameInfo.ModuleClass) => + ModuleClass(nameIndex(name1, toTasty)) + case DerivedTermName(prefix, NameInfo.Qualified(selector, ".")) => + Qualified(nameIndex(prefix, toTasty), nameIndex(selector)) + case name1 => + if (name1.isShadowedName) Shadowed(nameIndex(name1.revertShadowed, toTasty)) + else toTasty(name1.asSimpleName) + } nameIndex(tname) } + def nameIndex(name: Name): NameRef = nameIndex(name, Simple) + def nameIndex(str: String): NameRef = nameIndex(str.toTermName) def fullNameIndex(name: Name): NameRef = { - val pos = name.lastIndexOf('.') - if (pos > 0) - nameIndex(Qualified(fullNameIndex(name.take(pos)), nameIndex(name.drop(pos + 1)))) - else - nameIndex(name) + def split(name: SimpleTermName): TastyName = { + val pos = name.lastIndexOf('.') + if (pos <= 0) Simple(name) + else Qualified(fullNameIndex(name.take(pos)), nameIndex(name.drop(pos + 1))) + } + nameIndex(name, split) } private def withLength(op: => Unit, lengthWidth: Int = 1): Unit = { |