KT-53551 KT-52213 KT-58476 Fix handling of suspend functional types with context receivers

This commit is contained in:
strangepleasures
2023-09-07 12:40:01 +00:00
committed by Space Team
parent c2ee9bb1a4
commit 88453a05f1
10 changed files with 184 additions and 1 deletions
@@ -247,7 +247,10 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin
override fun visitGetValue(expression: IrGetValue): IrExpression {
val parameter = (expression.symbol.owner as? IrValueParameter)?.takeIf { it.parent == irFunction }
?: return expression
val lvar = localVals[parameter.index + if (irFunction.extensionReceiverParameter != null) 1 else 0]
val varIndex = if (parameter.index < 0) irFunction.contextReceiverParametersCount
else if (parameter.index < irFunction.contextReceiverParametersCount || irFunction.extensionReceiverParameter == null) parameter.index
else parameter.index + 1
val lvar = localVals[varIndex]
?: return expression
return IrGetValueImpl(expression.startOffset, expression.endOffset, lvar.symbol)
}