suppress switch branch de-duplication upon side effects (#1682)

fixes #1679
This commit is contained in:
Alex Lam S.L
2017-03-26 13:32:43 +08:00
committed by GitHub
parent 8a4f86528f
commit 94f84727ce
2 changed files with 50 additions and 1 deletions

View File

@@ -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];

View File

@@ -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
}