fix side effects in switch condition for singular blocks

This commit is contained in:
alexlamsl 2017-04-02 13:24:26 +08:00
parent c076e7b60d
commit 3fc717a531
3 changed files with 83 additions and 10 deletions

View File

@ -2599,7 +2599,15 @@ merge(Compressor.prototype, {
has_break = true;
});
self.walk(tw);
if (!has_break) return make_node(AST_BlockStatement, self, body[0]).optimize(compressor);
if (!has_break) {
body = body[0].body.slice();
body.unshift(make_node(AST_SimpleStatement, self.expression, {
body: self.expression
}));
return make_node(AST_BlockStatement, self, {
body: body
}).optimize(compressor);
}
}
return self;

View File

@ -1399,6 +1399,7 @@ issue_1670_1: {
evaluate: true,
dead_code: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
@ -1429,6 +1430,7 @@ issue_1670_2: {
dead_code: true,
passes: 2,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
@ -1458,6 +1460,7 @@ issue_1670_3: {
evaluate: true,
dead_code: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
@ -1488,6 +1491,7 @@ issue_1670_4: {
dead_code: true,
passes: 2,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
@ -1516,6 +1520,7 @@ issue_1670_5: {
evaluate: true,
keep_fargs: false,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
@ -1544,6 +1549,7 @@ issue_1670_6: {
evaluate: true,
keep_fargs: false,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {

View File

@ -1,5 +1,9 @@
constant_switch_1: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (1+1) {
case 1: foo(); break;
@ -13,7 +17,11 @@ constant_switch_1: {
}
constant_switch_2: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (1) {
case 1: foo();
@ -28,7 +36,11 @@ constant_switch_2: {
}
constant_switch_3: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (10) {
case 1: foo();
@ -44,7 +56,11 @@ constant_switch_3: {
}
constant_switch_4: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (2) {
case 1:
@ -65,7 +81,11 @@ constant_switch_4: {
}
constant_switch_5: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (1) {
case 1:
@ -94,7 +114,11 @@ constant_switch_5: {
}
constant_switch_6: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
OUT: {
foo();
@ -123,7 +147,11 @@ constant_switch_6: {
}
constant_switch_7: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
OUT: {
foo();
@ -161,7 +189,11 @@ constant_switch_7: {
}
constant_switch_8: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
OUT: switch (1) {
case 1:
@ -185,7 +217,11 @@ constant_switch_8: {
}
constant_switch_9: {
options = { dead_code: true, evaluate: true };
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
OUT: switch (1) {
case 1:
@ -263,6 +299,7 @@ issue_1663: {
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
var a = 100, b = 10;
@ -414,6 +451,7 @@ issue_1674: {
options = {
dead_code: true,
evaluate: true,
side_effects: true,
}
input: {
switch (0) {
@ -721,3 +759,24 @@ beautify: {
"}",
]
}
issue_1758: {
options = {
dead_code: true,
}
input: {
var a = 1, b = 2;
switch (a--) {
default:
b++;
}
console.log(a, b);
}
expect: {
var a = 1, b = 2;
a--;
b++;
console.log(a, b);
}
expect_stdout: "0 3"
}