[PSI2IR] Generate value arguments for context receivers in getter/setter

This commit is contained in:
Anastasiya Shadrina
2021-03-09 19:49:23 +07:00
committed by TeamCityServer
parent 5e426d5c16
commit 766e6bca75
5 changed files with 46 additions and 8 deletions
@@ -146,13 +146,12 @@ class AccessorPropertyLValue(
}
override fun load(): IrExpression =
// TODO: Use context receiver values
callReceiver.adjustForCallee(getterDescriptor!!).call { dispatchReceiverValue, extensionReceiverValue, _ ->
callReceiver.adjustForCallee(getterDescriptor!!).call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
IrCallImpl(
startOffset, endOffset,
type,
getter!!, typeArgumentsCount,
0,
contextReceiverValues.size,
origin,
superQualifier
).apply {
@@ -160,17 +159,19 @@ class AccessorPropertyLValue(
putTypeArguments()
dispatchReceiver = dispatchReceiverValue?.load()
extensionReceiver = extensionReceiverValue?.load()
for ((i, contextReceiverValue) in contextReceiverValues.withIndex()) {
putValueArgument(i, contextReceiverValue.load())
}
}
}
override fun store(irExpression: IrExpression) =
// TODO: Use context receiver values
callReceiver.adjustForCallee(setterDescriptor!!).call { dispatchReceiverValue, extensionReceiverValue, _ ->
callReceiver.adjustForCallee(setterDescriptor!!).call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
IrCallImpl(
startOffset, endOffset,
context.irBuiltIns.unitType,
setter!!, typeArgumentsCount,
1,
1 + contextReceiverValues.size,
origin,
superQualifier
).apply {
@@ -178,7 +179,10 @@ class AccessorPropertyLValue(
putTypeArguments()
dispatchReceiver = dispatchReceiverValue?.load()
extensionReceiver = extensionReceiverValue?.load()
putValueArgument(0, irExpression)
for ((i, contextReceiverValue) in contextReceiverValues.withIndex()) {
putValueArgument(i, contextReceiverValue.load())
}
putValueArgument(contextReceiverValues.size, irExpression)
}
}