Don't create externalVarargReceiverTmp when there's no need to create it

^KT-40689 fixed
This commit is contained in:
Shagen Ogandzhanian
2021-01-10 01:38:14 +01:00
committed by TeamCityServer
parent 6255f2bd77
commit cac57e4178
@@ -164,19 +164,23 @@ fun translateCall(
if (jsDispatchReceiver != null) { if (jsDispatchReceiver != null) {
// TODO: Do not create IIFE when receiver expression is simple or has no side effects // 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) // 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( val iifeFun = JsFunction(
emptyScope, emptyScope,
JsBlock( if (argumentsAsSingleArray is JsArrayLiteral) {
JsVars(JsVars.JsVar(receiverName, jsDispatchReceiver)), JsBlock(
JsReturn( JsReturn(
if (argumentsAsSingleArray is JsArrayLiteral) {
JsInvocation( JsInvocation(
JsNameRef(symbolName, receiverRef), JsNameRef(symbolName, jsDispatchReceiver),
argumentsAsSingleArray.expressions argumentsAsSingleArray.expressions
) )
} else { )
)
} else {
val receiverName = JsName("\$externalVarargReceiverTmp")
val receiverRef = receiverName.makeRef()
JsBlock(
JsVars(JsVars.JsVar(receiverName, jsDispatchReceiver)),
JsReturn(
JsInvocation( JsInvocation(
JsNameRef("apply", JsNameRef(symbolName, receiverRef)), JsNameRef("apply", JsNameRef(symbolName, receiverRef)),
listOf( listOf(
@@ -184,9 +188,9 @@ fun translateCall(
argumentsAsSingleArray argumentsAsSingleArray
) )
) )
} )
) )
), },
"VarargIIFE" "VarargIIFE"
) )