aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-08 15:26:27 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:15:48 +0100
commitbb5762a056c3d2ee224cea0f01726d8900745366 (patch)
tree45984059e0876c0248618a728ff87d0abccb6a2a
parent53a123064ffe437edc3d9e2f17530d3ce4e2b064 (diff)
downloaddotty-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.scala8
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)