diff --git a/lib/compress/index.js b/lib/compress/index.js index c7ce05e35..9edf982bf 100644 --- a/lib/compress/index.js +++ b/lib/compress/index.js @@ -1606,7 +1606,7 @@ def_optimize(AST_Switch, function(self, compressor) { // that way the next micro-optimization will merge them. // ** bail micro-optimization if not a simple switch case with breaks if (body.every((branch, i) => - (branch === default_or_exact || !branch.expression.has_side_effects(compressor)) + (branch === default_or_exact || branch.expression instanceof AST_Constant) && (branch.body.length === 0 || aborts(branch) || body.length - 1 === i)) ) { for (let i = 0; i < body.length; i++) { diff --git a/test/compress/switch.js b/test/compress/switch.js index acfd5fb69..eba2e9f2f 100644 --- a/test/compress/switch.js +++ b/test/compress/switch.js @@ -2594,6 +2594,42 @@ collapse_same_branches_not_in_a_row_ensure_no_side_effects: { } expect_stdout: ["2"] } + +collapse_same_branches_not_in_a_row_ensure_no_evaluate_elad: { + options = { + switches: true, + dead_code: true + } + input: { + let i = 1; + switch (true) { + case 3 == i: + console.log(i); + break; + case 5 == i: + console.log(5); + break; + case 1 == i: + console.log(i); + break; + } + } + expect: { + let i = 1; + switch (true) { + case 3 == i: + console.log(i); + break; + case 5 == i: + console.log(5); + break; + case 1 == i: + console.log(i); + } + } + expect_stdout: ["1"] +} + collapse_same_branches_not_in_a_row_even_if_last_case_without_abort: { options = { switches: true,