FIR2IR: utilize argument conversions
This commit is contained in:
committed by
teamcityserver
parent
f1fd3d6b5d
commit
5f6d2c5362
+15
-21
@@ -450,13 +450,7 @@ class CallAndReferenceGenerator(
|
|||||||
}
|
}
|
||||||
for ((index, argument) in call.arguments.withIndex()) {
|
for ((index, argument) in call.arguments.withIndex()) {
|
||||||
val valueParameter = valueParameters?.get(index)
|
val valueParameter = valueParameters?.get(index)
|
||||||
val argumentExpression =
|
val argumentExpression = convertArgument(argument, valueParameter)
|
||||||
with(adapterGenerator) {
|
|
||||||
visitor.convertToIrExpression(argument)
|
|
||||||
.applySamConversionIfNeeded(argument, valueParameter)
|
|
||||||
.applySuspendConversionIfNeeded(argument, valueParameter)
|
|
||||||
.applyAssigningArrayElementsToVarargInNamedForm(argument, valueParameter)
|
|
||||||
}
|
|
||||||
putValueArgument(index, argumentExpression)
|
putValueArgument(index, argumentExpression)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -494,13 +488,7 @@ class CallAndReferenceGenerator(
|
|||||||
return IrBlockImpl(startOffset, endOffset, type, IrStatementOrigin.ARGUMENTS_REORDERING_FOR_CALL).apply {
|
return IrBlockImpl(startOffset, endOffset, type, IrStatementOrigin.ARGUMENTS_REORDERING_FOR_CALL).apply {
|
||||||
for ((argument, parameter) in argumentMapping) {
|
for ((argument, parameter) in argumentMapping) {
|
||||||
val parameterIndex = valueParameters.indexOf(parameter)
|
val parameterIndex = valueParameters.indexOf(parameter)
|
||||||
val irArgument =
|
val irArgument = convertArgument(argument, parameter)
|
||||||
with(adapterGenerator) {
|
|
||||||
visitor.convertToIrExpression(argument)
|
|
||||||
.applySamConversionIfNeeded(argument, parameter)
|
|
||||||
.applySuspendConversionIfNeeded(argument, parameter)
|
|
||||||
.applyAssigningArrayElementsToVarargInNamedForm(argument, parameter)
|
|
||||||
}
|
|
||||||
if (irArgument.hasNoSideEffects()) {
|
if (irArgument.hasNoSideEffects()) {
|
||||||
putValueArgument(parameterIndex, irArgument)
|
putValueArgument(parameterIndex, irArgument)
|
||||||
} else {
|
} else {
|
||||||
@@ -515,13 +503,7 @@ class CallAndReferenceGenerator(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for ((argument, parameter) in argumentMapping) {
|
for ((argument, parameter) in argumentMapping) {
|
||||||
val argumentExpression =
|
val argumentExpression = convertArgument(argument, parameter, annotationMode)
|
||||||
with(adapterGenerator) {
|
|
||||||
visitor.convertToIrExpression(argument, annotationMode)
|
|
||||||
.applySamConversionIfNeeded(argument, parameter)
|
|
||||||
.applySuspendConversionIfNeeded(argument, parameter)
|
|
||||||
.applyAssigningArrayElementsToVarargInNamedForm(argument, parameter)
|
|
||||||
}
|
|
||||||
putValueArgument(valueParameters.indexOf(parameter), argumentExpression)
|
putValueArgument(valueParameters.indexOf(parameter), argumentExpression)
|
||||||
}
|
}
|
||||||
if (annotationMode) {
|
if (annotationMode) {
|
||||||
@@ -559,6 +541,18 @@ class CallAndReferenceGenerator(
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun convertArgument(
|
||||||
|
argument: FirExpression,
|
||||||
|
parameter: FirValueParameter?,
|
||||||
|
annotationMode: Boolean = false
|
||||||
|
): IrExpression =
|
||||||
|
with(adapterGenerator) {
|
||||||
|
visitor.convertToIrExpression(argument, annotationMode)
|
||||||
|
.applySamConversionIfNeeded(argument, parameter)
|
||||||
|
.applySuspendConversionIfNeeded(argument, parameter)
|
||||||
|
.applyAssigningArrayElementsToVarargInNamedForm(argument, parameter)
|
||||||
|
}
|
||||||
|
|
||||||
private fun IrExpression.applySamConversionIfNeeded(
|
private fun IrExpression.applySamConversionIfNeeded(
|
||||||
argument: FirExpression,
|
argument: FirExpression,
|
||||||
parameter: FirValueParameter?,
|
parameter: FirValueParameter?,
|
||||||
|
|||||||
Reference in New Issue
Block a user