diff options
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | test/compress/switch.js | 47 |
2 files changed, 50 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index 8d8387f2..8d1ef8ac 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2551,12 +2551,14 @@ merge(Compressor.prototype, { } else { body.push(branch); } - blocks[key] = branch; fallthrough = false; } else { body.push(branch); fallthrough = true; } + if (branch instanceof AST_Case && branch.expression.has_side_effects(compressor)) + blocks = Object.create(null); + if (!fallthrough) blocks[key] = branch; } for (; i < len && fallthrough; i++) { branch = self.body[i]; diff --git a/test/compress/switch.js b/test/compress/switch.js index 7d3d7d13..481257aa 100644 --- a/test/compress/switch.js +++ b/test/compress/switch.js @@ -434,3 +434,50 @@ issue_1674: { } expect_stdout: "PASS" } + +issue_1679: { + options = { + dead_code: true, + evaluate: true, + } + input: { + var a = 100, b = 10; + function f() { + switch (--b) { + default: + case !function x() {}: + break; + case b--: + switch (0) { + default: + case a--: + } + break; + case (a++): + break; + } + } + f(); + console.log(a, b); + } + expect: { + var a = 100, b = 10; + function f() { + switch (--b) { + default: + case !function x() {}: + break; + case b--: + switch (0) { + default: + case a--: + } + break; + case (a++): + } + } + f(); + console.log(a, b); + } + expect_stdout: true +} |