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 {
val irReturnType = varargArgumentsExpression.typeRef.toIrType()
return IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irReturnType,
varargArgumentsExpression.varargElementType.toIrType(),
varargArgumentsExpression.arguments.map { arg ->
convertToIrExpression(arg).run {
if (arg is FirSpreadArgumentExpression || arg is FirNamedArgumentExpression && arg.isSpread) {
IrSpreadElementImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, this)
}
else this
}
})
return varargArgumentsExpression.convertWithOffsets { startOffset, endOffset ->
IrVarargImpl(
startOffset,
endOffset,
varargArgumentsExpression.typeRef.toIrType(),
varargArgumentsExpression.varargElementType.toIrType(),
varargArgumentsExpression.arguments.map { it.convertToIrVarargElement() }
)
}
}
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 {
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
functionCall.copy().transformSingle(integerApproximator, null)
@@ -774,9 +781,7 @@ class Fir2IrVisitor(
startOffset, endOffset,
type = arrayType,
varargElementType = elementType,
elements = arrayOfCall.arguments.map {
convertToIrExpression(it)
}
elements = arrayOfCall.arguments.map { it.convertToIrVarargElement() }
)
}
}