@@ -518,26 +518,25 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(using Context) {
518
518
private def computeThisBindings () = {
519
519
// All needed this-proxies, paired-with and sorted-by nesting depth of
520
520
// 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)
529
524
530
525
var lastSelf : Symbol = NoSymbol
531
526
var lastLevel : Int = 0
532
527
for ((level, selfSym) <- sortedProxies) {
533
528
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
541
540
val binding = ValDef (selfSym.asTerm, QuoteUtils .changeOwnerOfTree(rhs, selfSym)).withSpan(selfSym.span)
542
541
bindingsBuf += binding
543
542
inlining.println(i " proxy at $level: $selfSym = ${bindingsBuf.last}" )
0 commit comments