FIR2IR: utilize argument conversions

This commit is contained in:
Jinseong Jeon
2020-10-25 22:09:31 -07:00
committed by teamcityserver
parent f1fd3d6b5d
commit 5f6d2c5362
@@ -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?,