From cac57e4178e6e035754e72c42f99223c04f951f9 Mon Sep 17 00:00:00 2001 From: Shagen Ogandzhanian Date: Sun, 10 Jan 2021 01:38:14 +0100 Subject: [PATCH] Don't create externalVarargReceiverTmp when there's no need to create it ^KT-40689 fixed --- .../js/transformers/irToJs/jsAstUtils.kt | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt index b97761fdf2d..e64b0c918d0 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt @@ -164,19 +164,23 @@ fun translateCall( if (jsDispatchReceiver != null) { // TODO: Do not create IIFE when receiver expression is simple or has no side effects // TODO: Do not create IIFE at all? (Currently there is no reliable way to create temporary variable in current scope) - val receiverName = JsName("\$externalVarargReceiverTmp") - val receiverRef = receiverName.makeRef() val iifeFun = JsFunction( emptyScope, - JsBlock( - JsVars(JsVars.JsVar(receiverName, jsDispatchReceiver)), - JsReturn( - if (argumentsAsSingleArray is JsArrayLiteral) { + if (argumentsAsSingleArray is JsArrayLiteral) { + JsBlock( + JsReturn( JsInvocation( - JsNameRef(symbolName, receiverRef), + JsNameRef(symbolName, jsDispatchReceiver), argumentsAsSingleArray.expressions ) - } else { + ) + ) + } else { + val receiverName = JsName("\$externalVarargReceiverTmp") + val receiverRef = receiverName.makeRef() + JsBlock( + JsVars(JsVars.JsVar(receiverName, jsDispatchReceiver)), + JsReturn( JsInvocation( JsNameRef("apply", JsNameRef(symbolName, receiverRef)), listOf( @@ -184,9 +188,9 @@ fun translateCall( argumentsAsSingleArray ) ) - } + ) ) - ), + }, "VarargIIFE" )