From: Alex Lam S.L Date: Mon, 12 Oct 2020 11:02:44 +0000 (+0100) Subject: fix corner case in `reduce_vars` (#4203) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=1cdf810f0bc7dfbbdadedd1274e990c46e6e59b8;p=UglifyJS.git fix corner case in `reduce_vars` (#4203) fixes #4198 --- diff --git a/lib/compress.js b/lib/compress.js index fc65e426..f930dd82 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6640,7 +6640,13 @@ merge(Compressor.prototype, { if (def.scope === scope) return true; return !scope.variables.has(node.name) && !scope.globals.has(node.name); } - return def.scope === scope || !scope.find_variable(node); + if (def.scope === scope) return true; + var s = def.scope; + do { + s = s.parent_scope; + if (s.variables.has(node.name)) return false; + } while (s !== scope); + return true; }) ? make_node(AST_Var, self, { definitions: self.definitions.map(function(defn) { var name = make_node(AST_SymbolVar, defn.name, defn.name); diff --git a/test/compress/const.js b/test/compress/const.js index f2b92247..72033f4a 100644 --- a/test/compress/const.js +++ b/test/compress/const.js @@ -805,3 +805,38 @@ issue_4197: { } expect_stdout: "1" } + +issue_4198: { + options = { + reduce_vars: true, + } + input: { + console.log(function() { + try { + throw "PASS"; + } catch (e) { + { + const e = "FAIL"; + } + return function() { + return e; + }(); + } + }()); + } + expect: { + console.log(function() { + try { + throw "PASS"; + } catch (e) { + { + const e = "FAIL"; + } + return function() { + return e; + }(); + } + }()); + } + expect_stdout: "PASS" +}