diff options
author | Martin Odersky <odersky@gmail.com> | 2015-03-08 15:26:27 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:15:48 +0100 |
commit | bb5762a056c3d2ee224cea0f01726d8900745366 (patch) | |
tree | 45984059e0876c0248618a728ff87d0abccb6a2a | |
parent | 53a123064ffe437edc3d9e2f17530d3ce4e2b064 (diff) | |
download | dotty-bb5762a056c3d2ee224cea0f01726d8900745366.tar.gz dotty-bb5762a056c3d2ee224cea0f01726d8900745366.tar.bz2 dotty-bb5762a056c3d2ee224cea0f01726d8900745366.zip |
Further harmonization between typing and unpickling
1) Prefixes in selections are widened if unstable
2) DefDefs get Method flag set
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala index 0cac3491a..1170d3eb8 100644 --- a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala @@ -347,6 +347,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) { isAbstractType var flags = givenFlags if (lacksDefinition) flags |= Deferred + if (tag == DEFDEF) flags |= Method if (ctx.mode.is(Mode.InSuperCall) && !flags.is(ParamOrAccessor)) flags |= InSuperCall if (ctx.owner.isClass) { if (tag == TYPEPARAM) flags |= Param | ExpandedName // TODO check name to determine ExpandedName @@ -584,6 +585,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) { ValDef(sym.asTerm) } else { + sym.setFlag(Method) sym.info = ExprType(info) pickling.println(i"reading param alias $name -> $currentAddr") DefDef(Nil, Nil, TypeTree(info)) @@ -693,9 +695,9 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) { } 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 + val qual = readQual(name) + untpd.Select(qual, unshadowed) + .withType(TermRef.withSig(qual.tpe.widenIfUnstable, name.asTermName, sig)) } readNameSplitSig match { case name: Name => readRest(name, Signature.NotAMethod) |