FIR: fix vararg remapping that merged named vararg

This commit is contained in:
Jinseong Jeon
2020-09-29 11:57:39 -07:00
committed by Mikhail Glukhikh
parent 29b23e79f3
commit 7af564c9f2
2 changed files with 6 additions and 7 deletions
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.*
@@ -52,8 +49,11 @@ internal fun remapArgumentsWithVararg(
this.typeRef = varargParameterTypeRef.withReplacedConeType(varargArrayType)
for ((i, arg) in argumentList.withIndex()) {
val valueParameter = argumentMapping.getValue(arg)
if (valueParameter.isVararg) {
// `arg` is a vararg argument.
// Collect arguments if `arg` is a vararg argument of interest or other vararg arguments.
if (valueParameter == varargParameter ||
// NB: don't pull out of named arguments.
(valueParameter.isVararg && arg !is FirNamedArgumentExpression)
) {
arguments += arg
} else if (arguments.isEmpty()) {
// `arg` is BEFORE the vararg arguments.
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_REFLECT
// TARGET_BACKEND: JVM