FIR: fix vararg remapping that merged named vararg
This commit is contained in:
committed by
Mikhail Glukhikh
parent
29b23e79f3
commit
7af564c9f2
+6
-6
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.fir.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
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.builder.buildVarargArgumentsExpression
|
import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -52,8 +49,11 @@ internal fun remapArgumentsWithVararg(
|
|||||||
this.typeRef = varargParameterTypeRef.withReplacedConeType(varargArrayType)
|
this.typeRef = varargParameterTypeRef.withReplacedConeType(varargArrayType)
|
||||||
for ((i, arg) in argumentList.withIndex()) {
|
for ((i, arg) in argumentList.withIndex()) {
|
||||||
val valueParameter = argumentMapping.getValue(arg)
|
val valueParameter = argumentMapping.getValue(arg)
|
||||||
if (valueParameter.isVararg) {
|
// Collect arguments if `arg` is a vararg argument of interest or other vararg arguments.
|
||||||
// `arg` is a vararg argument.
|
if (valueParameter == varargParameter ||
|
||||||
|
// NB: don't pull out of named arguments.
|
||||||
|
(valueParameter.isVararg && arg !is FirNamedArgumentExpression)
|
||||||
|
) {
|
||||||
arguments += arg
|
arguments += arg
|
||||||
} else if (arguments.isEmpty()) {
|
} else if (arguments.isEmpty()) {
|
||||||
// `arg` is BEFORE the vararg arguments.
|
// `arg` is BEFORE the vararg arguments.
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_REFLECT
|
// WITH_REFLECT
|
||||||
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|||||||
Reference in New Issue
Block a user