diff options
author | Martin Odersky <odersky@gmail.com> | 2015-02-10 12:39:15 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:09:43 +0100 |
commit | 1c5f3b75f7e70e8608d6be442087857bd4a6b2cc (patch) | |
tree | 26a197f56bfbd0a0ffa819cf68a730abd88a6260 /src/dotty/tools/dotc/core/pickling/NameBuffer.scala | |
parent | 41922c14bf1a45a3dcf7afca7719e0be84c2c29a (diff) | |
download | dotty-1c5f3b75f7e70e8608d6be442087857bd4a6b2cc.tar.gz dotty-1c5f3b75f7e70e8608d6be442087857bd4a6b2cc.tar.bz2 dotty-1c5f3b75f7e70e8608d6be442087857bd4a6b2cc.zip |
Add TASTY readers and printers for TASTy info.
So far printing is the only reader, ie. deserializer.
Numerous bugfixes to make first tests work.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/NameBuffer.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/NameBuffer.scala | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/NameBuffer.scala b/src/dotty/tools/dotc/core/pickling/NameBuffer.scala index c9994ecb5..70d6b9ee1 100644 --- a/src/dotty/tools/dotc/core/pickling/NameBuffer.scala +++ b/src/dotty/tools/dotc/core/pickling/NameBuffer.scala @@ -13,18 +13,18 @@ import PickleFormat._ class NameBuffer extends TastyBuffer(100000) { - private val nameRefs = new mutable.LinkedHashMap[TastyName, Ref] + private val nameRefs = new mutable.LinkedHashMap[TastyName, NameRef] - def nameIndex(name: TastyName): Ref = nameRefs.get(name) match { + def nameIndex(name: TastyName): NameRef = nameRefs.get(name) match { case Some(ref) => ref case None => - val ref = new Ref(nameRefs.size) + val ref = NameRef(nameRefs.size) nameRefs(name) = ref ref } - def nameIndex(name: Name): Ref = nameIndex(Simple(name.toTermName)) - def nameIndex(str: String): Ref = nameIndex(str.toTermName) + def nameIndex(name: Name): NameRef = nameIndex(Simple(name.toTermName)) + def nameIndex(str: String): NameRef = nameIndex(str.toTermName) private def withLength(op: => Unit): Unit = { val lengthAddr = currentAddr @@ -35,32 +35,34 @@ class NameBuffer extends TastyBuffer(100000) { putNat(lengthAddr, length, 1) } - def writeRef(ref: Ref) = writeNat(ref.index) + def writeNameRef(ref: NameRef) = writeNat(ref.index) def pickleName(name: TastyName): Unit = name match { case Simple(name) => - val bytes = Codec.toUTF8(chrs, name.start, name.length) + val bytes = + if (name.length == 0) new Array[Byte](0) + else Codec.toUTF8(chrs, name.start, name.length) writeByte(UTF8) writeNat(bytes.length) writeBytes(bytes, bytes.length) case Qualified(qualified, selector) => writeByte(QUALIFIED) - withLength { writeRef(qualified); writeRef(selector) } + withLength { writeNameRef(qualified); writeNameRef(selector) } case Signed(original, params, result) => writeByte(SIGNED) - withLength { writeRef(original); writeRef(result); params.foreach(writeRef) } + withLength { writeNameRef(original); writeNameRef(result); params.foreach(writeNameRef) } case Expanded(original) => writeByte(EXPANDED) - withLength { writeRef(original) } + withLength { writeNameRef(original) } case ModuleClass(module) => writeByte(MODULECLASS) - withLength { writeRef(module) } + withLength { writeNameRef(module) } case SuperAccessor(accessed) => writeByte(SUPERACCESSOR) - withLength { writeRef(accessed) } - case DefaultGetter(method, paramNumer) => + withLength { writeNameRef(accessed) } + case DefaultGetter(method, paramNumber) => writeByte(DEFAULTGETTER) - withLength { writeRef(method); writeNat(paramNumer) } + withLength { writeNameRef(method); writeNat(paramNumber) } } override def assemble(): Unit = { |