JS/Inlining: in RedundantStatementElimination remove unnecessary side effect check for binary expressions
This commit is contained in:
+41
-46
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user