From bdca4b45bdc339ce9dc808705b17e624bee54a99 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Sat, 9 May 2020 17:38:33 +0300 Subject: [PATCH] JS: inliner supports extra argument caused by suspend conversions --- .../suspendConversion/inlineSimple.kt | 1 - .../kotlin/js/inline/FunctionInlineMutator.kt | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt b/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt index 4ccba2c6065..9fde734848a 100644 --- a/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt +++ b/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt @@ -2,7 +2,6 @@ // WITH_RUNTIME // WITH_COROUTINES // IGNORE_BACKEND_FIR: JVM_IR -// IGNORE_BACKEND: JS import helpers.* import kotlin.coroutines.* diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt index 589344f519d..cc6e294bc35 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt @@ -46,9 +46,17 @@ private constructor( } private fun process() { - val arguments = getArguments() + var arguments = getArguments() val parameters = getParameters() + if (arguments.size > parameters.size) { + // Due to suspend conversions it is possible to have an extra argument, e.g. `fn($this$)` for `function fn() {...}` + // In such cases all missing arguments for default parameters are passed as `void 0` explicitly. + // Thus it is safe to drop it. + assert(arguments.size == parameters.size + 1) { "arguments.size (${arguments.size}) may only exceed the parameters.size (${parameters.size}) by one and only in case of suspend conversions" } + arguments = arguments.subList(0, parameters.size) + } + removeDefaultInitializers(arguments, parameters, body) aliasArgumentsIfNeeded(namingContext, arguments, parameters, call.source) renameLocalNames(namingContext, invokedFunction)