KT-54357 Fix passing of context receivers to object literal constructors

This commit is contained in:
Pavel Mikhailovskii
2022-12-27 11:52:36 +00:00
committed by Space Team
parent fff593492d
commit 9ca5e1b421
4 changed files with 34 additions and 1 deletions
@@ -17540,6 +17540,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt53846.kt");
}
@Test
@TestMetadata("kt54357.kt")
public void testKt54357() throws Exception {
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt54357.kt");
}
@Test
@TestMetadata("overload.kt")
public void testOverload() throws Exception {
@@ -263,7 +263,8 @@ fun StatementGenerator.generateCallReceiver(
extensionReceiverValue = generateReceiverOrNull(ktDefaultElement, extensionReceiver)
contextReceiverValues = when (ktDefaultElement) {
is KtConstructorDelegationCall, is KtSuperTypeCallEntry -> contextReceivers.mapNotNull {
generateContextReceiverForDelegatingConstructorCall(ktDefaultElement, it as ContextClassReceiver)
if (it is ContextClassReceiver) generateContextReceiverForDelegatingConstructorCall(ktDefaultElement, it)
else generateReceiverOrNull(ktDefaultElement, it)
}
else -> contextReceivers.mapNotNull { generateReceiverOrNull(ktDefaultElement, it) }
}
@@ -0,0 +1,20 @@
// !LANGUAGE: +ContextReceivers
// TARGET_BACKEND: JVM_IR
fun box(): String {
with(A()) {
object : B(){
init {
foo()
}
}
}
return "OK"
}
class A {
fun foo() {}
}
context(A)
open class B
@@ -17540,6 +17540,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt53846.kt");
}
@Test
@TestMetadata("kt54357.kt")
public void testKt54357() throws Exception {
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt54357.kt");
}
@Test
@TestMetadata("overload.kt")
public void testOverload() throws Exception {