JS/Inlining: in RedundantStatementElimination remove unnecessary side effect check for binary expressions

This commit is contained in:
Alexey Andreev
2016-06-07 11:48:15 +03:00
parent f0e64f8e38
commit b1fcad6dcc
@@ -79,54 +79,49 @@ class RedundantStatementElimination(private val root: JsFunction) {
} }
is JsBinaryOperation -> { is JsBinaryOperation -> {
if (expression.sideEffects == SideEffectKind.AFFECTS_STATE) { when (expression.operator) {
when (expression.operator) { JsBinaryOperator.BIT_AND,
JsBinaryOperator.BIT_AND, JsBinaryOperator.BIT_OR,
JsBinaryOperator.BIT_OR, JsBinaryOperator.BIT_XOR,
JsBinaryOperator.BIT_XOR, JsBinaryOperator.COMMA,
JsBinaryOperator.COMMA, JsBinaryOperator.ADD,
JsBinaryOperator.ADD, JsBinaryOperator.SUB,
JsBinaryOperator.SUB, JsBinaryOperator.MUL,
JsBinaryOperator.MUL, JsBinaryOperator.DIV,
JsBinaryOperator.DIV, JsBinaryOperator.MOD,
JsBinaryOperator.MOD, JsBinaryOperator.EQ,
JsBinaryOperator.EQ, JsBinaryOperator.NEQ,
JsBinaryOperator.NEQ, JsBinaryOperator.REF_EQ,
JsBinaryOperator.REF_EQ, JsBinaryOperator.REF_NEQ,
JsBinaryOperator.REF_NEQ, JsBinaryOperator.GT,
JsBinaryOperator.GT, JsBinaryOperator.GTE,
JsBinaryOperator.GTE, JsBinaryOperator.LT,
JsBinaryOperator.LT, JsBinaryOperator.LTE,
JsBinaryOperator.LTE, JsBinaryOperator.SHL,
JsBinaryOperator.SHL, JsBinaryOperator.SHR,
JsBinaryOperator.SHR, JsBinaryOperator.SHRU -> replace(expression.arg1) + replace(expression.arg2)
JsBinaryOperator.SHRU -> replace(expression.arg1) + replace(expression.arg2)
JsBinaryOperator.AND, JsBinaryOperator.AND,
JsBinaryOperator.OR -> { JsBinaryOperator.OR -> {
val right = replace(expression.arg2) val right = replace(expression.arg2)
if (right.isEmpty()) replace(expression.arg1) else listOf(expression) if (right.isEmpty()) replace(expression.arg1) else listOf(expression)
}
JsBinaryOperator.INOP,
JsBinaryOperator.INSTANCEOF -> listOf(expression)
JsBinaryOperator.ASG,
JsBinaryOperator.ASG_ADD,
JsBinaryOperator.ASG_SUB,
JsBinaryOperator.ASG_MUL,
JsBinaryOperator.ASG_DIV,
JsBinaryOperator.ASG_MOD,
JsBinaryOperator.ASG_BIT_AND,
JsBinaryOperator.ASG_BIT_OR,
JsBinaryOperator.ASG_BIT_XOR,
JsBinaryOperator.ASG_SHL,
JsBinaryOperator.ASG_SHR,
JsBinaryOperator.ASG_SHRU -> listOf(expression)
} }
}
else { JsBinaryOperator.INOP,
listOf(expression) JsBinaryOperator.INSTANCEOF -> listOf(expression)
JsBinaryOperator.ASG,
JsBinaryOperator.ASG_ADD,
JsBinaryOperator.ASG_SUB,
JsBinaryOperator.ASG_MUL,
JsBinaryOperator.ASG_DIV,
JsBinaryOperator.ASG_MOD,
JsBinaryOperator.ASG_BIT_AND,
JsBinaryOperator.ASG_BIT_OR,
JsBinaryOperator.ASG_BIT_XOR,
JsBinaryOperator.ASG_SHL,
JsBinaryOperator.ASG_SHR,
JsBinaryOperator.ASG_SHRU -> listOf(expression)
} }
} }