IR. Take care of type parameters for calls in DefaultArgumentStubGenerator
This commit is contained in:
+8
-3
@@ -132,12 +132,18 @@ open class DefaultArgumentStubGenerator constructor(val context: CommonBackendCo
|
|||||||
symbol = irFunction.symbol, descriptor = irFunction.symbol.descriptor,
|
symbol = irFunction.symbol, descriptor = irFunction.symbol.descriptor,
|
||||||
typeArgumentsCount = irFunction.typeParameters.size
|
typeArgumentsCount = irFunction.typeParameters.size
|
||||||
).apply {
|
).apply {
|
||||||
|
(0 until typeArgumentsCount).forEach { i ->
|
||||||
|
putTypeArgument(i, newIrFunction.typeParameters[i].defaultType)
|
||||||
|
}
|
||||||
dispatchReceiver = newIrFunction.dispatchReceiverParameter?.let { irGet(it) }
|
dispatchReceiver = newIrFunction.dispatchReceiverParameter?.let { irGet(it) }
|
||||||
|
|
||||||
params.forEachIndexed { i, variable -> putValueArgument(i, irGet(variable)) }
|
params.forEachIndexed { i, variable -> putValueArgument(i, irGet(variable)) }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
+irReturn(irCall(irFunction).apply {
|
+irReturn(irCall(irFunction).apply {
|
||||||
|
(0 until typeArgumentsCount).forEach { i ->
|
||||||
|
putTypeArgument(i, newIrFunction.typeParameters[i].defaultType)
|
||||||
|
}
|
||||||
dispatchReceiver = newIrFunction.dispatchReceiverParameter?.let { irGet(it) }
|
dispatchReceiver = newIrFunction.dispatchReceiverParameter?.let { irGet(it) }
|
||||||
extensionReceiver = newIrFunction.extensionReceiverParameter?.let { irGet(it) }
|
extensionReceiver = newIrFunction.extensionReceiverParameter?.let { irGet(it) }
|
||||||
|
|
||||||
@@ -196,6 +202,7 @@ open class DefaultParameterInjector constructor(
|
|||||||
typeArgumentsCount = symbolForCall.owner.typeParameters.size
|
typeArgumentsCount = symbolForCall.owner.typeParameters.size
|
||||||
)
|
)
|
||||||
.apply {
|
.apply {
|
||||||
|
copyTypeArgumentsFrom(expression)
|
||||||
params.forEach {
|
params.forEach {
|
||||||
log { "call::params@${it.first.index}/${it.first.name.asString()}: ${ir2string(it.second)}" }
|
log { "call::params@${it.first.index}/${it.first.name.asString()}: ${ir2string(it.second)}" }
|
||||||
putValueArgument(it.first.index, it.second)
|
putValueArgument(it.first.index, it.second)
|
||||||
@@ -385,9 +392,7 @@ private fun IrFunction.generateDefaultsFunctionImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
newFunction.returnType = returnType
|
newFunction.returnType = returnType
|
||||||
newFunction.dispatchReceiverParameter = dispatchReceiverParameter?.run {
|
newFunction.dispatchReceiverParameter = dispatchReceiverParameter?.copyTo(newFunction)
|
||||||
IrValueParameterImpl(startOffset, endOffset, origin, descriptor, type, varargElementType).also { it.parent = newFunction }
|
|
||||||
}
|
|
||||||
newFunction.extensionReceiverParameter = extensionReceiverParameter?.copyTo(newFunction)
|
newFunction.extensionReceiverParameter = extensionReceiverParameter?.copyTo(newFunction)
|
||||||
newFunction.valueParameters += newValueParameters
|
newFunction.valueParameters += newValueParameters
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user