diff options
author | Martin Odersky <odersky@gmail.com> | 2015-04-20 11:08:55 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-04-20 11:08:55 +0200 |
commit | 72d91a32888d6e35cb7ee33437329c8c751f2af1 (patch) | |
tree | f6c9f0ae44c3c08e001f0144e53dfe78e453817e /src/dotty/tools/dotc/core/pickling/TreePickler.scala | |
parent | 5efd0070d241b7dd464dae3d04ac55d64b6597ac (diff) | |
download | dotty-72d91a32888d6e35cb7ee33437329c8c751f2af1.tar.gz dotty-72d91a32888d6e35cb7ee33437329c8c751f2af1.tar.bz2 dotty-72d91a32888d6e35cb7ee33437329c8c751f2af1.zip |
All package refs should use TERMREFpkg for pickling
Previously, some references used TermRef and a name with signature,
which gave two different ways to represent a package.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/TreePickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/TreePickler.scala | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreePickler.scala b/src/dotty/tools/dotc/core/pickling/TreePickler.scala index 99bc8e81b..e463b4447 100644 --- a/src/dotty/tools/dotc/core/pickling/TreePickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreePickler.scala @@ -171,8 +171,11 @@ class TreePickler(pickler: TastyPickler) { else pickleRef() } case tpe: TermRefWithSignature => - writeByte(TERMREF) - pickleNameAndSig(tpe.name, tpe.signature); pickleType(tpe.prefix) + if (tpe.symbol.is(Flags.Package)) picklePackageRef(tpe.symbol) + else { + writeByte(TERMREF) + pickleNameAndSig(tpe.name, tpe.signature); pickleType(tpe.prefix) + } case tpe: NamedType => if (tpe.name == tpnme.Apply && tpe.prefix.argInfos.nonEmpty && tpe.prefix.isInstantiatedLambda) // instantiated lambdas are pickled as APPLIEDTYPE; #Apply will @@ -187,10 +190,8 @@ class TreePickler(pickler: TastyPickler) { pickleName(tpe.name); pickleType(tpe.prefix) } case tpe: ThisType => - if (tpe.cls.is(Flags.Package) && !tpe.cls.isEffectiveRoot) { - writeByte(TERMREFpkg) - pickleName(qualifiedName(tpe.cls)) - } + if (tpe.cls.is(Flags.Package) && !tpe.cls.isEffectiveRoot) + picklePackageRef(tpe.cls) else { writeByte(THIS) pickleType(tpe.tref) @@ -259,6 +260,11 @@ class TreePickler(pickler: TastyPickler) { println(i"error while pickling type $tpe") throw ex } + + def picklePackageRef(pkg: Symbol): Unit = { + writeByte(TERMREFpkg) + pickleName(qualifiedName(pkg)) + } def pickleMethodic(result: Type, names: List[Name], types: List[Type]) = withLength { |