From d61352c8f339d61c0cb01677dd1b2912cd1f8a6f Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 2 Oct 2014 20:54:13 +0400 Subject: [PATCH] JS inline: assignment binary operation is not side-effect free --- .../org/jetbrains/k2js/inline/util/sideEffectUtils.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/js/js.inliner/src/org/jetbrains/k2js/inline/util/sideEffectUtils.kt b/js/js.inliner/src/org/jetbrains/k2js/inline/util/sideEffectUtils.kt index 2e596132395..1925f5ce982 100644 --- a/js/js.inliner/src/org/jetbrains/k2js/inline/util/sideEffectUtils.kt +++ b/js/js.inliner/src/org/jetbrains/k2js/inline/util/sideEffectUtils.kt @@ -32,6 +32,7 @@ import com.google.dart.compiler.backend.js.ast.JsObjectLiteral import com.google.dart.compiler.backend.js.ast.JsPostfixOperation import com.google.dart.compiler.backend.js.ast.JsPrefixOperation import com.google.dart.compiler.backend.js.ast.RecursiveJsVisitor +import com.google.dart.compiler.backend.js.ast.JsBinaryOperator public fun canHaveSideEffect(x: JsExpression): Boolean { return with(SideEffectVisitor()) { @@ -63,11 +64,14 @@ private open class SideEffectVisitor() : RecursiveJsVisitor() { when (node) { is JsValueLiteral, is JsConditional, - is JsBinaryOperation, is JsArrayAccess, is JsArrayLiteral, - is JsNameRef -> true - else -> false + is JsNameRef -> + true + is JsBinaryOperation -> + !node.getOperator().isAssignment() + else -> + false } }