KT-54357 Fix passing of context receivers to object literal constructors
This commit is contained in:
committed by
Space Team
parent
fff593492d
commit
9ca5e1b421
+6
@@ -17540,6 +17540,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt53846.kt");
|
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
|
@Test
|
||||||
@TestMetadata("overload.kt")
|
@TestMetadata("overload.kt")
|
||||||
public void testOverload() throws Exception {
|
public void testOverload() throws Exception {
|
||||||
|
|||||||
+2
-1
@@ -263,7 +263,8 @@ fun StatementGenerator.generateCallReceiver(
|
|||||||
extensionReceiverValue = generateReceiverOrNull(ktDefaultElement, extensionReceiver)
|
extensionReceiverValue = generateReceiverOrNull(ktDefaultElement, extensionReceiver)
|
||||||
contextReceiverValues = when (ktDefaultElement) {
|
contextReceiverValues = when (ktDefaultElement) {
|
||||||
is KtConstructorDelegationCall, is KtSuperTypeCallEntry -> contextReceivers.mapNotNull {
|
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) }
|
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
|
||||||
+6
@@ -17540,6 +17540,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt53846.kt");
|
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
|
@Test
|
||||||
@TestMetadata("overload.kt")
|
@TestMetadata("overload.kt")
|
||||||
public void testOverload() throws Exception {
|
public void testOverload() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user