diff --git a/lib/compress.js b/lib/compress.js index fc11840d..176c7bf1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -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; diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 87942ab9..b3812022 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -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: { diff --git a/test/compress/switch.js b/test/compress/switch.js index 82d725f2..cb481de6 100644 --- a/test/compress/switch.js +++ b/test/compress/switch.js @@ -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" +}