From 265d066878cd256d7e1f4c0165e83d809ab9909c Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 18 May 2020 18:10:34 -0700 Subject: [PATCH] FIR2IR: minor refactor to share IrVarargElement creation. --- .../kotlin/fir/backend/Fir2IrVisitor.kt | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 6722e8f54f6..3add30f2202 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -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() } ) } }