KT-52791 Make it possible to pass multiple context receivers to a class

This commit is contained in:
Pavel Mikhailovskii
2022-12-28 11:21:03 +00:00
committed by Space Team
parent 62217b39ec
commit 906c161068
38 changed files with 180 additions and 516 deletions
@@ -370,18 +370,18 @@ class BodyGenerator(
irBlockBody: IrBlockBody
) {
val thisAsReceiverParameter = classDescriptor.thisAsReceiverParameter
val receiver = IrGetValueImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValue(thisAsReceiverParameter)
)
for ((index, receiverDescriptor) in classDescriptor.contextReceivers.withIndex()) {
val irValueParameter = irConstructor.valueParameters[index]
irBlockBody.statements.add(
IrSetFieldImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
context.additionalDescriptorStorage.getSyntheticField(receiverDescriptor.value).symbol,
receiver,
IrGetValueImpl(
UNDEFINED_OFFSET,
UNDEFINED_OFFSET,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValue(thisAsReceiverParameter)
),
IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irValueParameter.type, irValueParameter.symbol),
context.irBuiltIns.unitType
)