[Scripting] fix receiver substitution in script JVM IR lowering
This commit is contained in:
committed by
teamcityserver
parent
a7b94b398a
commit
32b6cfe2ea
+2
-7
@@ -494,15 +494,10 @@ private class ScriptToClassTransformer(
|
||||
if (irScript.earlierScripts != null) {
|
||||
val target = expression.symbol.owner
|
||||
val receiver: IrValueParameter? = target.dispatchReceiverParameter
|
||||
if (target.origin == IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR && receiver?.name == Name.special("<this>")) {
|
||||
if (receiver?.name == Name.special("<this>")) {
|
||||
val newReceiver = getAccessCallForEarlierScript(expression, receiver.type)
|
||||
if (newReceiver != null) {
|
||||
val builder = context.createIrBuilder(expression.symbol)
|
||||
val newCall = builder.irCall(expression.symbol, target.returnType, origin = expression.origin).also {
|
||||
it.copyTypeAndValueArgumentsFrom(expression)
|
||||
it.dispatchReceiver = newReceiver
|
||||
}
|
||||
return super.visitCall(newCall)
|
||||
expression.dispatchReceiver = newReceiver
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -146,6 +146,21 @@ class ReplTest : TestCase() {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
// TODO: make it covering more cases
|
||||
fun testIrReceiverOvewrite() {
|
||||
checkEvaluateInRepl(
|
||||
sequenceOf(
|
||||
"fun f(a: String) = a",
|
||||
"f(\"x\")"
|
||||
),
|
||||
sequenceOf(
|
||||
null,
|
||||
"x"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoEvaluationError() {
|
||||
checkEvaluateInReplDiags(
|
||||
|
||||
Reference in New Issue
Block a user