Scripting, IR: fix capturing of implicit receiver

#KT-55068 fixed
This commit is contained in:
Ilya Chernikov
2022-12-09 14:43:24 +01:00
committed by Space Team
parent 07af2d807a
commit 42a0acac4f
4 changed files with 27 additions and 2 deletions
@@ -489,18 +489,22 @@ private class ScriptToClassTransformer(
transformAnnotations(data)
typeRemapper.withinScope(this) {
val newDispatchReceiverParameter = dispatchReceiverParameter?.transform(data)
val isInScriptConstructor = this@transformFunctionChildren is IrConstructor && parent == irScript
val dataForChildren =
when {
newDispatchReceiverParameter == null -> data
newDispatchReceiverParameter.type == scriptClassReceiver.type ->
ScriptToClassTransformerContext(newDispatchReceiverParameter.symbol, null, null, this is IrConstructor)
ScriptToClassTransformerContext(newDispatchReceiverParameter.symbol, null, null, isInScriptConstructor)
newDispatchReceiverParameter.type == data.valueParameterForFieldReceiver?.owner?.type ->
ScriptToClassTransformerContext(
null,
data.fieldForScriptThis,
newDispatchReceiverParameter.symbol,
this is IrConstructor
isInScriptConstructor
)
else -> data
}
dispatchReceiverParameter = newDispatchReceiverParameter