Skip to content

Commit 5597657

Browse files
committed
wip 6
1 parent 42fea52 commit 5597657

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
@@ -1076,10 +1076,9 @@ class TreeUnpickler(reader: TastyReader,
10761076

10771077
def accessibleDenot(qualType: Type, name: Name, sig: Signature, target: Name) = {
10781078
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1079-
val d = qualType.decl(name).atSignature(sig, target)
1080-
if !d.symbol.exists then d
1081-
else if d.symbol.isAccessibleFrom(pre) then d.asSeenFrom(pre)
1082-
else qualType.nonPrivateDecl(name).atSignature(sig, target).asSeenFrom(pre)
1079+
val d = qualType.findMember(name, pre).atSignature(sig, target)
1080+
if (!d.symbol.exists || d.symbol.isAccessibleFrom(pre)) d
1081+
else qualType.findMember(name, pre, excluded = Private).atSignature(sig, target)
10831082
}
10841083

10851084
def readSimpleTerm(): Tree = tag match {
@@ -1185,18 +1184,25 @@ class TreeUnpickler(reader: TastyReader,
11851184
val target = new BufferedOutputStream( new FileOutputStream(file) );
11861185
try target.write(data.getBytes(StandardCharsets.UTF_8)) finally target.close;
11871186
}
1188-
var sname = readName()
1187+
var symname = readName()
1188+
var precisesig = readName() match
1189+
case SignedName(_, sig, _) => sig
1190+
case _ => Signature.NotAMethod
11891191
val qual = readTerm()
11901192
val qualType = qual.tpe.widenIfUnstable
11911193
val space = if currentAddr == end then qualType else readType()
11921194
def selectAmbiguous(name: Name, pre: Type, denot: Denotation) =
11931195
makeSelect(qual, name, denot.asSeenFrom(pre))
11941196
def select(name: Name, sig: Signature, target: Name) =
11951197
makeSelect(qual, name, accessibleDenot(qualType, name, sig, target))
1196-
val res = sname match
1198+
val res = symname match
11971199
case SignedName(name, sig, target) =>
11981200
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1199-
val isAmbiguous = pre.nonPrivateMember(name).isOverloaded
1201+
assert(precisesig != Signature.NotAMethod)
1202+
val isAmbiguous = pre.nonPrivateMember(name).match
1203+
case d: MultiDenotation =>
1204+
d.atSignature(precisesig, target).isInstanceOf[MultiDenotation]
1205+
case _ => false
12001206
if isAmbiguous then
12011207
// writeBytes(TastyPrinter.show(reader.bytes), new File("WOW123.txt"))
12021208
// val d0 = pre.nonPrivateMember(name)
@@ -1208,7 +1214,7 @@ class TreeUnpickler(reader: TastyReader,
12081214
// report.echo(s"[$d0, $d0_1, $d0_2] [$d1, $d1_1, $d1_2]")
12091215
makeSelect(qual, name, space.decl(name).atSignature(sig, target).asSeenFrom(pre))
12101216
else
1211-
select(name, sig, target)
1217+
select(name, precisesig, target)
12121218
case name =>
12131219
select(name, Signature.NotAMethod, EmptyTermName)
12141220
res

0 commit comments

Comments
 (0)