@@ -1000,21 +1000,28 @@ object Erasure {
10001000 * which is then dropped in `typedStats`.
10011001 */
10021002 private def addRetainedInlineBodies (stats : List [untpd.Tree ])(using Context ): List [untpd.Tree ] =
1003- lazy val retainerDef : Map [Symbol , DefDef ] = stats.collect {
1004- case stat : DefDef @ unchecked if stat.symbol.name.is(BodyRetainerName ) =>
1005- val retainer = stat.symbol
1006- val origName = retainer.name.asTermName.exclude(BodyRetainerName )
1007- val targetName =
1008- if retainer.hasAnnotation(defn.TargetNameAnnot ) then
1009- retainer.targetName.unmangle(BodyRetainerName ).exclude(BodyRetainerName )
1010- else origName
1011- val inlineMeth = atPhase(typerPhase) {
1012- retainer.owner.info.decl(origName)
1013- .matchingDenotation(retainer.owner.thisType, stat.symbol.info, targetName)
1014- .symbol
1015- }
1016- (inlineMeth, stat)
1017- }.toMap
1003+ lazy val (rSyms, originalSyms, retainerDef): (List [Symbol ], List [Symbol ], Map [Symbol , DefDef ]) =
1004+ val rSyms = List .newBuilder[Symbol ]
1005+ val originalSyms = List .newBuilder[Symbol ]
1006+ val retainerDef = stats.collect {
1007+ case stat : DefDef @ unchecked if stat.symbol.name.is(BodyRetainerName ) =>
1008+ val retainer = stat.symbol
1009+ val origName = retainer.name.asTermName.exclude(BodyRetainerName )
1010+ val targetName =
1011+ if retainer.hasAnnotation(defn.TargetNameAnnot ) then
1012+ retainer.targetName.unmangle(BodyRetainerName ).exclude(BodyRetainerName )
1013+ else origName
1014+ val inlineMeth = atPhase(typerPhase) {
1015+ retainer.owner.info.decl(origName)
1016+ .matchingDenotation(retainer.owner.thisType, stat.symbol.info, targetName)
1017+ .symbol
1018+ }
1019+ if inlineMeth.name.endsWith(nme.SPECIALIZED_SUFFIX .toSimpleName) then
1020+ rSyms += retainer
1021+ originalSyms += inlineMeth
1022+ (inlineMeth, stat)
1023+ }.toMap
1024+ (rSyms.result(), originalSyms.result(), retainerDef)
10181025 stats.mapConserve {
10191026 case stat : DefDef @ unchecked if stat.symbol.isRetainedInlineMethod =>
10201027 val rdef = retainerDef(stat.symbol)
@@ -1024,8 +1031,8 @@ object Erasure {
10241031 val mapBody = TreeTypeMap (
10251032 oldOwners = rdef.symbol :: Nil ,
10261033 newOwners = stat.symbol :: Nil ,
1027- substFrom = fromParams,
1028- substTo = toParams)
1034+ substFrom = rSyms ::: fromParams,
1035+ substTo = originalSyms ::: toParams)
10291036 cpy.DefDef (stat)(rhs = mapBody.transform(rdef.rhs))
10301037 case stat => stat
10311038 }
0 commit comments