FIR2IR: minor refactor to share IrVarargElement creation.

This commit is contained in:
Jinseong Jeon
2020-05-18 18:10:34 -07:00
committed by Mikhail Glukhikh
parent ff509bdcd3
commit 265d066878
@@ -251,19 +251,26 @@ class Fir2IrVisitor(
} }
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: Any?): IrElement { override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: Any?): IrElement {
val irReturnType = varargArgumentsExpression.typeRef.toIrType() return varargArgumentsExpression.convertWithOffsets { startOffset, endOffset ->
return IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irReturnType, IrVarargImpl(
varargArgumentsExpression.varargElementType.toIrType(), startOffset,
varargArgumentsExpression.arguments.map { arg -> endOffset,
convertToIrExpression(arg).run { varargArgumentsExpression.typeRef.toIrType(),
if (arg is FirSpreadArgumentExpression || arg is FirNamedArgumentExpression && arg.isSpread) { varargArgumentsExpression.varargElementType.toIrType(),
IrSpreadElementImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, this) varargArgumentsExpression.arguments.map { it.convertToIrVarargElement() }
} )
else this }
}
})
} }
private fun FirExpression.convertToIrVarargElement(): IrVarargElement =
if (this is FirSpreadArgumentExpression || this is FirNamedArgumentExpression && this.isSpread) {
IrSpreadElementImpl(
source?.startOffset ?: UNDEFINED_OFFSET,
source?.endOffset ?: UNDEFINED_OFFSET,
convertToIrExpression(this)
)
} else convertToIrExpression(this)
override fun visitFunctionCall(functionCall: FirFunctionCall, data: Any?): IrExpression { override fun visitFunctionCall(functionCall: FirFunctionCall, data: Any?): IrExpression {
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) { val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
functionCall.copy().transformSingle(integerApproximator, null) functionCall.copy().transformSingle(integerApproximator, null)
@@ -774,9 +781,7 @@ class Fir2IrVisitor(
startOffset, endOffset, startOffset, endOffset,
type = arrayType, type = arrayType,
varargElementType = elementType, varargElementType = elementType,
elements = arrayOfCall.arguments.map { elements = arrayOfCall.arguments.map { it.convertToIrVarargElement() }
convertToIrExpression(it)
}
) )
} }
} }