KT-51277 Fix matching of context receivers and parameter desriptors

This commit is contained in:
Pavel Mikhailovskii
2022-12-29 11:28:11 +00:00
committed by Space Team
parent 399ea1092e
commit 0b38ab4f01
4 changed files with 29 additions and 2 deletions
@@ -17498,6 +17498,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51247.kt");
}
@Test
@TestMetadata("kt51277.kt")
public void testKt51277() throws Exception {
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt");
}
@Test
@TestMetadata("kt51284.kt")
public void testKt51284() throws Exception {
@@ -95,7 +95,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
receiver.declarationDescriptor.extensionReceiverParameter!!.type.toIrType()
is ContextReceiver -> {
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters.find {
it.value == receiver
it.value == receiver.original
} ?: error("Unknown receiver: $receiver")
receiverParameter.type.toIrType()
}
@@ -133,7 +133,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
}
is ContextReceiver -> {
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters
.single { it.value == receiver }
.single { it.value == receiver.original }
IrGetValueImpl(
defaultStartOffset, defaultStartOffset, irReceiverType,
context.symbolTable.referenceValueParameter(receiverParameter)
@@ -0,0 +1,15 @@
// !LANGUAGE: +ContextReceivers
// TARGET_BACKEND: JVM_IR
class C<T> {
fun foo() = 1
}
context(C<*>) fun test() = foo()
fun box(): String {
with(C<Int>()) {
test()
}
return "OK"
}
@@ -17498,6 +17498,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51247.kt");
}
@Test
@TestMetadata("kt51277.kt")
public void testKt51277() throws Exception {
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt");
}
@Test
@TestMetadata("kt51284.kt")
public void testKt51284() throws Exception {