Skip to content

Commit 42fea52

Browse files
committed
wip 5
1 parent e91eccf commit 42fea52

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,9 +1076,10 @@ 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.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)
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)
10821083
}
10831084

10841085
def readSimpleTerm(): Tree = tag match {
@@ -1178,6 +1179,12 @@ class TreeUnpickler(reader: TastyReader,
11781179
readTerm().outerSelect(levels, SkolemType(readType()))
11791180
case SELECTin =>
11801181
// tests/run/hashsetremove.scala failed
1182+
import java.io._
1183+
import java.nio.charset.StandardCharsets
1184+
def writeBytes( data : String, file : File ) = {
1185+
val target = new BufferedOutputStream( new FileOutputStream(file) );
1186+
try target.write(data.getBytes(StandardCharsets.UTF_8)) finally target.close;
1187+
}
11811188
var sname = readName()
11821189
val qual = readTerm()
11831190
val qualType = qual.tpe.widenIfUnstable
@@ -1186,16 +1193,25 @@ class TreeUnpickler(reader: TastyReader,
11861193
makeSelect(qual, name, denot.asSeenFrom(pre))
11871194
def select(name: Name, sig: Signature, target: Name) =
11881195
makeSelect(qual, name, accessibleDenot(qualType, name, sig, target))
1189-
sname match
1196+
val res = sname match
11901197
case SignedName(name, sig, target) =>
11911198
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
11921199
val isAmbiguous = pre.nonPrivateMember(name).isOverloaded
11931200
if isAmbiguous then
1201+
// writeBytes(TastyPrinter.show(reader.bytes), new File("WOW123.txt"))
1202+
// val d0 = pre.nonPrivateMember(name)
1203+
// val d0_1 = d0.atSignature(sig, target)
1204+
// val d0_2 = d0_1.asSeenFrom(pre)
1205+
// val d1 = space.decl(name)
1206+
// val d1_1 = d1.atSignature(sig, target)
1207+
// val d1_2 = d1_1.asSeenFrom(pre)
1208+
// report.echo(s"[$d0, $d0_1, $d0_2] [$d1, $d1_1, $d1_2]")
11941209
makeSelect(qual, name, space.decl(name).atSignature(sig, target).asSeenFrom(pre))
11951210
else
11961211
select(name, sig, target)
11971212
case name =>
11981213
select(name, Signature.NotAMethod, EmptyTermName)
1214+
res
11991215
case REPEATED =>
12001216
val elemtpt = readTpt()
12011217
SeqLiteral(until(end)(readTerm()), elemtpt)

tests/pos-tmp/hashsetremove.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ object Test extends App {
55
val h = new HashSet[Int]
66
h += 1
77
assert(!h.remove(0))
8-
assert(h(1))
9-
assert(h.remove(1))
10-
assert(!h(1))
11-
assert(!h.remove(1))
12-
assert(!h(1))
8+
// assert(h(1))
9+
// assert(h.remove(1))
10+
// assert(!h(1))
11+
// assert(!h.remove(1))
12+
// assert(!h(1))
1313
}

0 commit comments

Comments
 (0)