diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/RedundantStatementElimination.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/RedundantStatementElimination.kt index 57c01c39e06..2650583f0a0 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/RedundantStatementElimination.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/RedundantStatementElimination.kt @@ -36,12 +36,26 @@ class RedundantStatementElimination(private val root: JsFunction) { private fun process() { object : JsVisitorWithContextImpl() { override fun visit(x: JsExpressionStatement, ctx: JsContext): Boolean { - if (!x.expression.isSuspend && (x.synthetic || x.expression.synthetic)) { - val replacement = replace(x.expression) - if (replacement.size != 1 || replacement[0] != x.expression) { - hasChanges = true - ctx.addPrevious(replacement.map { JsExpressionStatement(it).apply { synthetic = true } }) - ctx.removeMe() + if (!x.expression.isSuspend) { + val expression = x.expression + if (x.synthetic || expression.synthetic) { + val replacement = replace(x.expression) + if (replacement.size != 1 || replacement[0] != x.expression) { + hasChanges = true + ctx.addPrevious(replacement.map { JsExpressionStatement(it).apply { synthetic = true } }) + ctx.removeMe() + } + } + else if (expression is JsBinaryOperation && expression.operator == JsBinaryOperator.COMMA) { + var currentExpression = expression + while (currentExpression is JsBinaryOperation && currentExpression.operator == JsBinaryOperator.COMMA) { + val replacement = replace(currentExpression.arg2) + if (replacement.isNotEmpty()) break + currentExpression = currentExpression.arg1 + } + if (currentExpression != expression) { + ctx.replaceMe(JsExpressionStatement(currentExpression).apply { copyMetadataFrom(x) }) + } } } return super.visit(x, ctx)