From: Alex Lam S.L Date: Mon, 28 Sep 2020 06:09:55 +0000 (+0100) Subject: fix corner case in `merge_vars` (#4158) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=9e07ac410261dcbc074a29598a974b5de7cbe1da;p=UglifyJS.git fix corner case in `merge_vars` (#4158) fixes #4157 --- diff --git a/lib/compress.js b/lib/compress.js index 25a993f6..360bbe7a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4448,15 +4448,16 @@ merge(Compressor.prototype, { push(); segment.block = node; walk_body(node, tw); + pop(); if (node.bcatch) { var def = node.bcatch.argname.definition(); references[def.id] = false; if (def = def.redefined()) references[def.id] = false; - pop(); push(); + if (node.bfinally) segment.block = node.bcatch; walk_body(node.bcatch, tw); + pop(); } - pop(); if (node.bfinally) node.bfinally.walk(tw); return true; } diff --git a/test/compress/merge_vars.js b/test/compress/merge_vars.js index 7eb3f13c..5f4b6606 100644 --- a/test/compress/merge_vars.js +++ b/test/compress/merge_vars.js @@ -2617,9 +2617,9 @@ issue_4126_1: { try { console.log("PASS"); } catch (e) { - var c = a; + var b = a; } finally { - var c = c; + var c = b; } console.log(c); } @@ -2860,3 +2860,71 @@ issue_4155: { "function", ] } + +issue_4157_1: { + options = { + dead_code: true, + loops: true, + merge_vars: true, + } + input: { + (function() { + try { + for (var a = "FAIL"; a; a++) + return; + var b = 0; + } finally { + console.log(b); + } + })(); + } + expect: { + (function() { + try { + var a = "FAIL"; + if (a) + return; + var b = 0; + } finally { + console.log(b); + } + })(); + } + expect_stdout: "undefined" +} + +issue_4157_2: { + options = { + dead_code: true, + loops: true, + merge_vars: true, + } + input: { + (function() { + try { + throw "FAIL"; + } catch (e) { + for (var a = e; a; a++) + return; + var b = 0; + } finally { + console.log(b); + } + })(); + } + expect: { + (function() { + try { + throw "FAIL"; + } catch (e) { + var a = e; + if (a) + return; + var b = 0; + } finally { + console.log(b); + } + })(); + } + expect_stdout: "undefined" +}