[IR] Fix local function with default param
The key 'localDeclarationsData' is a IrFunction whose symbol owner is 'IrDeclarationOrigin.LOCAL_FUNCTION'. To find the 'localsData', it's required to get the original local IrFunction ('IrDeclarationOrigin.LOCAL_FUNCTION') for the IrFunction with default arguments (IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER).
Related to KTIJ-25558
This commit is contained in:
committed by
Space Team
parent
993acad3f3
commit
fa6fc0e334
+5
-2
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
|||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
|
import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.jvm.localDeclarationsPhase
|
import org.jetbrains.kotlin.backend.jvm.localDeclarationsPhase
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.FragmentSharedVariablesLowering.Companion.GENERATED_FUNCTION_NAME
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
|
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
|
||||||
import org.jetbrains.kotlin.ir.builders.irCall
|
import org.jetbrains.kotlin.ir.builders.irCall
|
||||||
@@ -58,7 +57,11 @@ internal class FragmentLocalFunctionPatchLowering(
|
|||||||
declaration.body?.transformChildrenVoid(object : IrElementTransformerVoidWithContext() {
|
declaration.body?.transformChildrenVoid(object : IrElementTransformerVoidWithContext() {
|
||||||
override fun visitCall(expression: IrCall): IrExpression {
|
override fun visitCall(expression: IrCall): IrExpression {
|
||||||
expression.transformChildrenVoid(this)
|
expression.transformChildrenVoid(this)
|
||||||
val localsData = localDeclarationsData[expression.symbol.owner] ?: return super.visitCall(expression)
|
val localDeclarationsDataKey = when (expression.symbol.owner.origin) {
|
||||||
|
is IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER -> context.mapping.defaultArgumentsOriginalFunction[expression.symbol.owner]
|
||||||
|
else -> expression.symbol.owner
|
||||||
|
}
|
||||||
|
val localsData = localDeclarationsData[localDeclarationsDataKey] ?: return super.visitCall(expression)
|
||||||
val remappedTarget: LocalDeclarationsLowering.LocalFunctionContext = localsData.localContext
|
val remappedTarget: LocalDeclarationsLowering.LocalFunctionContext = localsData.localContext
|
||||||
|
|
||||||
val irBuilder = context.createJvmIrBuilder(declaration.symbol)
|
val irBuilder = context.createJvmIrBuilder(declaration.symbol)
|
||||||
|
|||||||
Reference in New Issue
Block a user