KT-51277 Fix matching of context receivers and parameter desriptors
This commit is contained in:
committed by
Space Team
parent
399ea1092e
commit
0b38ab4f01
+6
@@ -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 {
|
||||
|
||||
+2
-2
@@ -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"
|
||||
}
|
||||
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user