Skip to content

Commit 5e6944a

Browse files
committed
wip 6
1 parent 3a3febf commit 5e6944a

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ class TreePickler(pickler: TastyPickler) {
422422
writeByte(SELECTin)
423423
withLength {
424424
pickleNameAndSig(name, tree.symbol.signature, ename)
425+
pickleNameAndSig(name, sig, ename)
425426
pickleTree(qual)
426427
if tree.symbol.exists then
427428
pickleType(tree.symbol.owner.typeRef)

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,10 +1078,9 @@ class TreeUnpickler(reader: TastyReader,
10781078

10791079
def accessibleDenot(qualType: Type, name: Name, sig: Signature, target: Name) = {
10801080
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1081-
val d = qualType.decl(name).atSignature(sig, target)
1082-
if !d.symbol.exists then d
1083-
else if d.symbol.isAccessibleFrom(pre) then d.asSeenFrom(pre)
1084-
else qualType.nonPrivateDecl(name).atSignature(sig, target).asSeenFrom(pre)
1081+
val d = qualType.findMember(name, pre).atSignature(sig, target)
1082+
if (!d.symbol.exists || d.symbol.isAccessibleFrom(pre)) d
1083+
else qualType.findMember(name, pre, excluded = Private).atSignature(sig, target)
10851084
}
10861085

10871086
def readSimpleTerm(): Tree = tag match {
@@ -1187,18 +1186,25 @@ class TreeUnpickler(reader: TastyReader,
11871186
val target = new BufferedOutputStream( new FileOutputStream(file) );
11881187
try target.write(data.getBytes(StandardCharsets.UTF_8)) finally target.close;
11891188
}
1190-
var sname = readName()
1189+
var symname = readName()
1190+
var precisesig = readName() match
1191+
case SignedName(_, sig, _) => sig
1192+
case _ => Signature.NotAMethod
11911193
val qual = readTerm()
11921194
val qualType = qual.tpe.widenIfUnstable
11931195
val space = if currentAddr == end then qualType else readType()
11941196
def selectAmbiguous(name: Name, pre: Type, denot: Denotation) =
11951197
makeSelect(qual, name, denot.asSeenFrom(pre))
11961198
def select(name: Name, sig: Signature, target: Name) =
11971199
makeSelect(qual, name, accessibleDenot(qualType, name, sig, target))
1198-
val res = sname match
1200+
val res = symname match
11991201
case SignedName(name, sig, target) =>
12001202
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1201-
val isAmbiguous = pre.nonPrivateMember(name).isOverloaded
1203+
assert(precisesig != Signature.NotAMethod)
1204+
val isAmbiguous = pre.nonPrivateMember(name).match
1205+
case d: MultiDenotation =>
1206+
d.atSignature(precisesig, target).isInstanceOf[MultiDenotation]
1207+
case _ => false
12021208
if isAmbiguous then
12031209
// writeBytes(TastyPrinter.show(reader.bytes), new File("WOW123.txt"))
12041210
// val d0 = pre.nonPrivateMember(name)
@@ -1210,7 +1216,7 @@ class TreeUnpickler(reader: TastyReader,
12101216
// report.echo(s"[$d0, $d0_1, $d0_2] [$d1, $d1_1, $d1_2]")
12111217
makeSelect(qual, name, space.decl(name).atSignature(sig, target).asSeenFrom(pre))
12121218
else
1213-
select(name, sig, target)
1219+
select(name, precisesig, target)
12141220
case name =>
12151221
select(name, Signature.NotAMethod, EmptyTermName)
12161222
res

0 commit comments

Comments
 (0)