@@ -518,26 +518,25 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(using Context) {
518518 private def computeThisBindings () = {
519519 // All needed this-proxies, paired-with and sorted-by nesting depth of
520520 // the classes they represent (innermost first)
521- val sortedProxies = thisProxy.toList.map {
522- case (cls, proxy) =>
523- // The class that the this-proxy `selfSym` represents
524- def classOf (selfSym : Symbol ) = selfSym.info.classSymbol
525- // The total nesting depth of the class represented by `selfSym`.
526- def outerLevel (selfSym : Symbol ): Int = classOf (selfSym).ownersIterator.length
527- (outerLevel(cls), proxy.symbol)
528- }.sortBy(- _._1)
521+ val sortedProxies = thisProxy.toList
522+ .map((cls, proxy) => (cls.ownersIterator.length, proxy.symbol))
523+ .sortBy(- _._1)
529524
530525 var lastSelf : Symbol = NoSymbol
531526 var lastLevel : Int = 0
532527 for ((level, selfSym) <- sortedProxies) {
533528 lazy val rhsClsSym = selfSym.info.widenDealias.classSymbol
534- val rhs =
535- if (lastSelf.exists)
536- ref(lastSelf).outerSelect(lastLevel - level, selfSym.info)
537- else if (rhsClsSym.is(Module ) && rhsClsSym.isStatic)
538- ref(rhsClsSym.sourceModule)
539- else
540- inlineCallPrefix
529+ val rhs = selfSym.info.dealias match
530+ case info : TermRef if info.isStable =>
531+ ref(info)
532+ case info =>
533+ val rhsClsSym = info.widenDealias.classSymbol
534+ if rhsClsSym.is(Module ) && rhsClsSym.isStatic then
535+ ref(rhsClsSym.sourceModule)
536+ else if lastSelf.exists then
537+ ref(lastSelf).outerSelect(lastLevel - level, selfSym.info)
538+ else
539+ inlineCallPrefix
541540 val binding = ValDef (selfSym.asTerm, QuoteUtils .changeOwnerOfTree(rhs, selfSym)).withSpan(selfSym.span)
542541 bindingsBuf += binding
543542 inlining.println(i " proxy at $level: $selfSym = ${bindingsBuf.last}" )
0 commit comments