JS inline: assignment binary operation is not side-effect free

This commit is contained in:
Alexey Tsvetkov
2014-10-02 20:54:13 +04:00
committed by Zalim Bashorov
parent a795ee6218
commit d61352c8f3
@@ -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.JsPostfixOperation
import com.google.dart.compiler.backend.js.ast.JsPrefixOperation 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.RecursiveJsVisitor
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator
public fun canHaveSideEffect(x: JsExpression): Boolean { public fun canHaveSideEffect(x: JsExpression): Boolean {
return with(SideEffectVisitor()) { return with(SideEffectVisitor()) {
@@ -63,11 +64,14 @@ private open class SideEffectVisitor() : RecursiveJsVisitor() {
when (node) { when (node) {
is JsValueLiteral, is JsValueLiteral,
is JsConditional, is JsConditional,
is JsBinaryOperation,
is JsArrayAccess, is JsArrayAccess,
is JsArrayLiteral, is JsArrayLiteral,
is JsNameRef -> true is JsNameRef ->
else -> false true
is JsBinaryOperation ->
!node.getOperator().isAssignment()
else ->
false
} }
} }