From 4038c06b1e0c76d6dcadc2274a4052c3aa642da5 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 10 Feb 2022 16:54:06 +0300 Subject: [PATCH] [FIR JS] Treat named arguments as positional for dynamics Note: 174/1627 failing FirJsTest tests remaining - 170 are multi-module tests - 4 tests have to do with IR --- .../calls/FirArgumentsToParametersMapper.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt index 9a7adbeb30b..50ecdd8a181 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt @@ -159,19 +159,25 @@ private class FirCallArgumentsProcessor( } private fun processNonLambdaArgument(argument: FirExpression, isLastArgument: Boolean) { - // process position argument - if (argument !is FirNamedArgumentExpression) { - if (processPositionArgument(argument, isLastArgument)) { - state = State.VARARG_POSITION + when { + // process position argument + argument !is FirNamedArgumentExpression -> { + if (processPositionArgument(argument, isLastArgument)) { + state = State.VARARG_POSITION + } } - } - // process named argument - else { - if (state == State.VARARG_POSITION) { - completeVarargPositionArguments() + // process named argument + function.origin == FirDeclarationOrigin.DynamicScope -> { + if (processPositionArgument(argument.expression, isLastArgument)) { + state = State.VARARG_POSITION + } + } + else -> { + if (state == State.VARARG_POSITION) { + completeVarargPositionArguments() + } + processNamedArgument(argument) } - - processNamedArgument(argument) } }