@@ -170,11 +170,13 @@ class TreeUnpickler(reader: TastyReader,
170170 case ex : Exception => fail(ex)
171171 }
172172
173- class TreeReader (val reader : TastyReader ) {
173+ class TreeReader (val reader : TastyReader , inInlineBody : Boolean = false ) {
174174 import reader .*
175175
176- def forkAt (start : Addr ): TreeReader = new TreeReader (subReader(start, endAddr))
177- def fork : TreeReader = forkAt(currentAddr)
176+ def forkAt (start : Addr , inInlineBody : Boolean = false ): TreeReader =
177+ new TreeReader (subReader(start, endAddr), inInlineBody)
178+
179+ def fork : TreeReader = forkAt(currentAddr, inInlineBody)
178180
179181 def skipParentTree (tag : Int ): Unit = {
180182 if tag == SPLITCLAUSE then ()
@@ -694,7 +696,7 @@ class TreeUnpickler(reader: TastyReader,
694696 val ctx1 = localContext(sym)(using ctx0).addMode(Mode .ReadPositions )
695697 inContext(sourceChangeContext(Addr (0 ))(using ctx1)) {
696698 // avoids space leaks by not capturing the current context
697- forkAt(rhsStart).readTree()
699+ forkAt(rhsStart, inInlineBody = true ).readTree()
698700 }
699701 })
700702 goto(start)
@@ -1580,21 +1582,14 @@ class TreeUnpickler(reader: TastyReader,
15801582 val d = ownerTpe.decl(name).atSignature(sig, target)
15811583 (if ! d.exists then lookupInSuper else d).asSeenFrom(prefix)
15821584
1583- val denot0 = inContext(ctx.addMode(Mode .ResolveFromTASTy )):
1585+ val denot = inContext(ctx.addMode(Mode .ResolveFromTASTy )):
15841586 searchDenot // able to resolve SourceInvisible members
15851587
1586- val denot =
1587- if
1588- denot0.symbol.exists
1589- && denot0.symbol.is(SourceInvisible )
1590- && denot0.symbol.isDefinedInSource
1591- then
1592- searchDenot // fallback
1593- else
1594- denot0
1595-
15961588
1597- makeSelect(qual, name, denot)
1589+ val sel = makeSelect(qual, name, denot)
1590+ if denot == NoDenotation && inInlineBody && sel.denot.symbol.exists && sel.symbol.isDefinedInCurrentRun then
1591+ throw new ChangedMethodDenot (sel.denot.symbol)
1592+ sel
15981593 case REPEATED =>
15991594 val elemtpt = readTpt()
16001595 SeqLiteral (until(end)(readTree()), elemtpt)
@@ -1901,6 +1896,9 @@ class TreeUnpickler(reader: TastyReader,
19011896
19021897object TreeUnpickler {
19031898
1899+ /** Specifically thrown when a SELECTin was written to TASTy, i.e. is expected to resolve, and then doesn't. */
1900+ private [dotc] final class ChangedMethodDenot (val resolved : Symbol ) extends Exception
1901+
19041902 /** Define the expected format of the tasty bytes
19051903 * - TopLevel: Tasty that contains a full class nested in its package
19061904 * - Term: Tasty that contains only a term tree
0 commit comments