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");
|
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
|
@Test
|
||||||
@TestMetadata("kt51284.kt")
|
@TestMetadata("kt51284.kt")
|
||||||
public void testKt51284() throws Exception {
|
public void testKt51284() throws Exception {
|
||||||
|
|||||||
+2
-2
@@ -95,7 +95,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
|
|||||||
receiver.declarationDescriptor.extensionReceiverParameter!!.type.toIrType()
|
receiver.declarationDescriptor.extensionReceiverParameter!!.type.toIrType()
|
||||||
is ContextReceiver -> {
|
is ContextReceiver -> {
|
||||||
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters.find {
|
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters.find {
|
||||||
it.value == receiver
|
it.value == receiver.original
|
||||||
} ?: error("Unknown receiver: $receiver")
|
} ?: error("Unknown receiver: $receiver")
|
||||||
receiverParameter.type.toIrType()
|
receiverParameter.type.toIrType()
|
||||||
}
|
}
|
||||||
@@ -133,7 +133,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
|
|||||||
}
|
}
|
||||||
is ContextReceiver -> {
|
is ContextReceiver -> {
|
||||||
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters
|
val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters
|
||||||
.single { it.value == receiver }
|
.single { it.value == receiver.original }
|
||||||
IrGetValueImpl(
|
IrGetValueImpl(
|
||||||
defaultStartOffset, defaultStartOffset, irReceiverType,
|
defaultStartOffset, defaultStartOffset, irReceiverType,
|
||||||
context.symbolTable.referenceValueParameter(receiverParameter)
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("kt51284.kt")
|
@TestMetadata("kt51284.kt")
|
||||||
public void testKt51284() throws Exception {
|
public void testKt51284() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user