[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) {
|
if (irScript.earlierScripts != null) {
|
||||||
val target = expression.symbol.owner
|
val target = expression.symbol.owner
|
||||||
val receiver: IrValueParameter? = target.dispatchReceiverParameter
|
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)
|
val newReceiver = getAccessCallForEarlierScript(expression, receiver.type)
|
||||||
if (newReceiver != null) {
|
if (newReceiver != null) {
|
||||||
val builder = context.createIrBuilder(expression.symbol)
|
expression.dispatchReceiver = newReceiver
|
||||||
val newCall = builder.irCall(expression.symbol, target.returnType, origin = expression.origin).also {
|
|
||||||
it.copyTypeAndValueArgumentsFrom(expression)
|
|
||||||
it.dispatchReceiver = newReceiver
|
|
||||||
}
|
|
||||||
return super.visitCall(newCall)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+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
|
@Test
|
||||||
fun testNoEvaluationError() {
|
fun testNoEvaluationError() {
|
||||||
checkEvaluateInReplDiags(
|
checkEvaluateInReplDiags(
|
||||||
|
|||||||
Reference in New Issue
Block a user