FIR2IR: minor refactor to share IrVarargElement creation.
This commit is contained in:
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)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user