From e7643248a314244caeae8464ae5b713ede5b2e3d Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 1 Nov 2020 17:01:00 +0000 Subject: [PATCH] fix corner case in `merge_vars` (#4258) fixes #4257 --- lib/compress.js | 8 ++++++-- test/compress/merge_vars.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 0e8b495f..0c49d49d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4502,7 +4502,7 @@ merge(Compressor.prototype, { segment.loop = true; var save = segment; node.body.walk(tw); - if (segment.loop == "c") segment = save; + if (segment.inserted === node) segment = save; node.condition.walk(tw); pop(); return true; @@ -4543,7 +4543,9 @@ merge(Compressor.prototype, { if (node instanceof AST_LabeledStatement) { push(); segment.block = node; + var save = segment; node.body.walk(tw); + if (segment.inserted === node) segment = save; pop(); return true; } @@ -4580,7 +4582,9 @@ merge(Compressor.prototype, { node.body.forEach(function(branch) { push(); segment.block = node; + var save = segment; walk_body(branch, tw); + if (segment.inserted === node) segment = save; pop(); }); return true; @@ -4746,7 +4750,7 @@ merge(Compressor.prototype, { stack.push(segment); pop(); } - segment.loop = "c"; + segment.inserted = segment.block; push(); while (stack.length) { var seg = stack.pop(); diff --git a/test/compress/merge_vars.js b/test/compress/merge_vars.js index ec0410fa..1841e3db 100644 --- a/test/compress/merge_vars.js +++ b/test/compress/merge_vars.js @@ -3146,3 +3146,40 @@ issue_4255: { } expect_stdout: "0" } + +issue_4257: { + options = { + merge_vars: true, + toplevel: true, + } + input: { + var a = 0; + for (var i = 0; i < 2; i++) + switch (--a) { + case 0: + var b = 0; + break; + case 0: + default: + var c = 1 + (0 | (b && A)); + console.log(c); + } + } + expect: { + var a = 0; + for (var i = 0; i < 2; i++) + switch (--a) { + case 0: + var b = 0; + break; + case 0: + default: + var c = 1 + (0 | (b && A)); + console.log(c); + } + } + expect_stdout: [ + "1", + "1", + ] +} -- 2.34.1