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(
startOffset,
endOffset,
varargArgumentsExpression.typeRef.toIrType(),
varargArgumentsExpression.varargElementType.toIrType(), varargArgumentsExpression.varargElementType.toIrType(),
varargArgumentsExpression.arguments.map { arg -> varargArgumentsExpression.arguments.map { it.convertToIrVarargElement() }
convertToIrExpression(arg).run { )
if (arg is FirSpreadArgumentExpression || arg is FirNamedArgumentExpression && arg.isSpread) {
IrSpreadElementImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, this)
} }
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)
}
) )
} }
} }