Skip to content

Commit 3a3febf

Browse files
committed
wip 5
1 parent 08aacb3 commit 3a3febf

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
@@ -1078,9 +1078,10 @@ 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.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)
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)
10841085
}
10851086

10861087
def readSimpleTerm(): Tree = tag match {
@@ -1180,6 +1181,12 @@ class TreeUnpickler(reader: TastyReader,
11801181
readTerm().outerSelect(levels, SkolemType(readType()))
11811182
case SELECTin =>
11821183
// tests/run/hashsetremove.scala failed
1184+
import java.io._
1185+
import java.nio.charset.StandardCharsets
1186+
def writeBytes( data : String, file : File ) = {
1187+
val target = new BufferedOutputStream( new FileOutputStream(file) );
1188+
try target.write(data.getBytes(StandardCharsets.UTF_8)) finally target.close;
1189+
}
11831190
var sname = readName()
11841191
val qual = readTerm()
11851192
val qualType = qual.tpe.widenIfUnstable
@@ -1188,16 +1195,25 @@ class TreeUnpickler(reader: TastyReader,
11881195
makeSelect(qual, name, denot.asSeenFrom(pre))
11891196
def select(name: Name, sig: Signature, target: Name) =
11901197
makeSelect(qual, name, accessibleDenot(qualType, name, sig, target))
1191-
sname match
1198+
val res = sname match
11921199
case SignedName(name, sig, target) =>
11931200
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
11941201
val isAmbiguous = pre.nonPrivateMember(name).isOverloaded
11951202
if isAmbiguous then
1203+
// writeBytes(TastyPrinter.show(reader.bytes), new File("WOW123.txt"))
1204+
// val d0 = pre.nonPrivateMember(name)
1205+
// val d0_1 = d0.atSignature(sig, target)
1206+
// val d0_2 = d0_1.asSeenFrom(pre)
1207+
// val d1 = space.decl(name)
1208+
// val d1_1 = d1.atSignature(sig, target)
1209+
// val d1_2 = d1_1.asSeenFrom(pre)
1210+
// report.echo(s"[$d0, $d0_1, $d0_2] [$d1, $d1_1, $d1_2]")
11961211
makeSelect(qual, name, space.decl(name).atSignature(sig, target).asSeenFrom(pre))
11971212
else
11981213
select(name, sig, target)
11991214
case name =>
12001215
select(name, Signature.NotAMethod, EmptyTermName)
1216+
res
12011217
case REPEATED =>
12021218
val elemtpt = readTpt()
12031219
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)