aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-08 11:03:29 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:15:47 +0100
commit5a43cb120f33328fdc755488684240dbd517283f (patch)
tree4247fb76e5b85e75e33d925949fc6d3deb35b2a7 /src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
parentf1ffa4c0a0a32057795c4395aecd990c6ae057e2 (diff)
downloaddotty-5a43cb120f33328fdc755488684240dbd517283f.tar.gz
dotty-5a43cb120f33328fdc755488684240dbd517283f.tar.bz2
dotty-5a43cb120f33328fdc755488684240dbd517283f.zip
Pickle shadowed names
Shadowed names in types need to be pickled and treated on unpickling. We choose to make Shadowed a separate TastyName class, to avoid the ad-hoc name-mangling in current dotc. When names are redone Shadowed will also become a special class in the compiler proper.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala')
-rw-r--r--src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
index 9e18a9a6c..d7d53c3a9 100644
--- a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
@@ -69,6 +69,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
case Simple(name) => name
case Qualified(qual, name) => toTermName(qual) ++ "." ++ toTermName(name)
case Signed(original, params, result) => toTermName(original)
+ case Shadowed(original) => toTermName(original).shadowedName
case Expanded(original) => ???
case ModuleClass(original) => toTermName(original).moduleClassName.toTermName
case SuperAccessor(accessed) => ???
@@ -686,10 +687,17 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
if (name == nme.CONSTRUCTOR) ctx.fresh.addMode(Mode.InSuperCall) else ctx
readTerm()(localCtx)
}
+ def readRest(name: Name, sig: Signature) = {
+ val unshadowed = if (name.isShadowedName) name.revertShadowed else name
+ val sel = readQual(unshadowed).selectWithSig(unshadowed, sig)
+ if (unshadowed != name) sel.withType(sel.tpe.asInstanceOf[NamedType].shadowed)
+ else sel
+ }
readNameSplitSig match {
- case name: Name => readQual(name).selectWithSig(name, Signature.NotAMethod)
- case (name: Name, sig: Signature) => readQual(name).selectWithSig(name, sig)
+ case name: Name => readRest(name, Signature.NotAMethod)
+ case (name: Name, sig: Signature) => readRest(name, sig)
}
+
case NEW =>
New(readTpt())
case EMPTYTREE =>