@@ -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)
@@ -1581,21 +1583,14 @@ class TreeUnpickler(reader: TastyReader,
15811583 val d = ownerTpe.decl(name).atSignature(sig, target)
15821584 (if ! d.exists then lookupInSuper else d).asSeenFrom(prefix)
15831585
1584- val denot0 = inContext(ctx.addMode(Mode .ResolveFromTASTy )):
1586+ val denot = inContext(ctx.addMode(Mode .ResolveFromTASTy )):
15851587 searchDenot // able to resolve SourceInvisible members
15861588
1587- val denot =
1588- if
1589- denot0.symbol.exists
1590- && denot0.symbol.is(SourceInvisible )
1591- && denot0.symbol.isDefinedInSource
1592- then
1593- searchDenot // fallback
1594- else
1595- denot0
1596-
15971589
1598- makeSelect(qual, name, denot)
1590+ val sel = makeSelect(qual, name, denot)
1591+ if denot == NoDenotation && inInlineBody && sel.denot.symbol.exists && sel.symbol.isDefinedInCurrentRun then
1592+ throw new ChangedMethodDenot (sel.denot.symbol)
1593+ sel
15991594 case REPEATED =>
16001595 val elemtpt = readTpt()
16011596 SeqLiteral (until(end)(readTree()), elemtpt)
@@ -1902,6 +1897,9 @@ class TreeUnpickler(reader: TastyReader,
19021897
19031898object TreeUnpickler {
19041899
1900+ /** Specifically thrown when a SELECTin was written to TASTy, i.e. is expected to resolve, and then doesn't. */
1901+ private [dotc] final class ChangedMethodDenot (val resolved : Symbol ) extends Exception
1902+
19051903 /** Define the expected format of the tasty bytes
19061904 * - TopLevel: Tasty that contains a full class nested in its package
19071905 * - Term: Tasty that contains only a term tree
0 commit comments