@@ -9,6 +9,7 @@ import Symbols._
99import Types ._
1010import Scopes ._
1111import SymDenotations ._
12+ import Denotations ._
1213import Names ._
1314import NameOps ._
1415import StdNames ._
@@ -330,12 +331,12 @@ class TreeUnpickler(reader: TastyReader,
330331 case TERMREFin =>
331332 var sname = readName()
332333 val prefix = readType()
333- val space = readType()
334+ val owner = readType()
334335 sname match {
335336 case SignedName (name, sig) =>
336- TermRef (prefix, name, space .decl(name).asSeenFrom(prefix).atSignature(sig ))
337+ TermRef (prefix, name, owner .decl(name).atSignature(sig).asSeenFrom(prefix ))
337338 case name =>
338- TermRef (prefix, name, space .decl(name).asSeenFrom(prefix))
339+ TermRef (prefix, name, owner .decl(name).asSeenFrom(prefix))
339340 }
340341 case TYPEREFin =>
341342 val name = readName().toTypeName
@@ -1040,10 +1041,8 @@ class TreeUnpickler(reader: TastyReader,
10401041 }
10411042 }
10421043
1043- def completeSelect (name : Name , sig : Signature ): Select = {
1044- val qual = readTerm()(ctx)
1044+ def makeSelect (qual : Tree , name : Name , denot : Denotation ): Select =
10451045 var qualType = qual.tpe.widenIfUnstable
1046- val denot = accessibleDenot(qualType, name, sig)
10471046 val owner = denot.symbol.maybeOwner
10481047 if (owner.isPackageObject && qualType.termSymbol.is(Package ))
10491048 qualType = qualType.select(owner.sourceModule)
@@ -1052,7 +1051,11 @@ class TreeUnpickler(reader: TastyReader,
10521051 case name : TermName => TermRef (qualType, name, denot)
10531052 }
10541053 ConstFold (untpd.Select (qual, name).withType(tpe))
1055- }
1054+
1055+ def completeSelect (name : Name , sig : Signature ): Select =
1056+ val qual = readTerm()(ctx)
1057+ val denot = accessibleDenot(qual.tpe.widenIfUnstable, name, sig)
1058+ makeSelect(qual, name, denot)
10561059
10571060 def readQualId (): (untpd.Ident , TypeRef ) =
10581061 val qual = readTerm().asInstanceOf [untpd.Ident ]
@@ -1165,6 +1168,18 @@ class TreeUnpickler(reader: TastyReader,
11651168 case SELECTouter =>
11661169 val levels = readNat()
11671170 readTerm().outerSelect(levels, SkolemType (readType()))
1171+ case SELECTin =>
1172+ var sname = readName()
1173+ val qual = readTerm()
1174+ val owner = readType()
1175+ def select (name : Name , denot : Denotation ) =
1176+ val prefix = ctx.typeAssigner.maybeSkolemizePrefix(qual.tpe.widenIfUnstable, name)
1177+ makeSelect(qual, name, denot.asSeenFrom(prefix))
1178+ sname match
1179+ case SignedName (name, sig) =>
1180+ select(name, owner.decl(name).atSignature(sig))
1181+ case name =>
1182+ select(name, owner.decl(name))
11681183 case REPEATED =>
11691184 val elemtpt = readTpt()
11701185 SeqLiteral (until(end)(readTerm()), elemtpt)
0 commit comments