diff options
author | Martin Odersky <odersky@gmail.com> | 2015-03-08 11:03:29 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:15:47 +0100 |
commit | 5a43cb120f33328fdc755488684240dbd517283f (patch) | |
tree | 4247fb76e5b85e75e33d925949fc6d3deb35b2a7 /src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala | |
parent | f1ffa4c0a0a32057795c4395aecd990c6ae057e2 (diff) | |
download | dotty-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.scala | 12 |
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 => |