@@ -9,6 +9,7 @@ import Symbols._
9
9
import Types ._
10
10
import Scopes ._
11
11
import SymDenotations ._
12
+ import Denotations ._
12
13
import Names ._
13
14
import NameOps ._
14
15
import StdNames ._
@@ -330,12 +331,12 @@ class TreeUnpickler(reader: TastyReader,
330
331
case TERMREFin =>
331
332
var sname = readName()
332
333
val prefix = readType()
333
- val space = readType()
334
+ val owner = readType()
334
335
sname match {
335
336
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 ))
337
338
case name =>
338
- TermRef (prefix, name, space .decl(name).asSeenFrom(prefix))
339
+ TermRef (prefix, name, owner .decl(name).asSeenFrom(prefix))
339
340
}
340
341
case TYPEREFin =>
341
342
val name = readName().toTypeName
@@ -1040,10 +1041,8 @@ class TreeUnpickler(reader: TastyReader,
1040
1041
}
1041
1042
}
1042
1043
1043
- def completeSelect (name : Name , sig : Signature ): Select = {
1044
- val qual = readTerm()(ctx)
1044
+ def makeSelect (qual : Tree , name : Name , denot : Denotation ): Select =
1045
1045
var qualType = qual.tpe.widenIfUnstable
1046
- val denot = accessibleDenot(qualType, name, sig)
1047
1046
val owner = denot.symbol.maybeOwner
1048
1047
if (owner.isPackageObject && qualType.termSymbol.is(Package ))
1049
1048
qualType = qualType.select(owner.sourceModule)
@@ -1052,7 +1051,11 @@ class TreeUnpickler(reader: TastyReader,
1052
1051
case name : TermName => TermRef (qualType, name, denot)
1053
1052
}
1054
1053
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)
1056
1059
1057
1060
def readQualId (): (untpd.Ident , TypeRef ) =
1058
1061
val qual = readTerm().asInstanceOf [untpd.Ident ]
@@ -1165,6 +1168,18 @@ class TreeUnpickler(reader: TastyReader,
1165
1168
case SELECTouter =>
1166
1169
val levels = readNat()
1167
1170
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))
1168
1183
case REPEATED =>
1169
1184
val elemtpt = readTpt()
1170
1185
SeqLiteral (until(end)(readTerm()), elemtpt)
0 commit comments