From 94f84727ce454c3ecf5206ac79dba4a21ec6deb6 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 26 Mar 2017 13:32:43 +0800 Subject: [PATCH] suppress switch branch de-duplication upon side effects (#1682) fixes #1679 --- lib/compress.js | 4 +++- test/compress/switch.js | 47 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) 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 +} -- 2.34.1