aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/TreePickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-04-20 11:08:55 +0200
committerMartin Odersky <odersky@gmail.com>2015-04-20 11:08:55 +0200
commit72d91a32888d6e35cb7ee33437329c8c751f2af1 (patch)
treef6c9f0ae44c3c08e001f0144e53dfe78e453817e /src/dotty/tools/dotc/core/pickling/TreePickler.scala
parent5efd0070d241b7dd464dae3d04ac55d64b6597ac (diff)
downloaddotty-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.scala18
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 {