From 23ca7d675f5c7bbd80571ce40b8d951831d359ad Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 22 Oct 2020 03:13:11 +0100 Subject: [PATCH] fix corner case in `functions` (#4234) fixes #4233 --- lib/compress.js | 4 +++- test/compress/functions.js | 39 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index b82fcca0..ec9fd2a1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4774,7 +4774,9 @@ merge(Compressor.prototype, { node.definitions.forEach(function(defn) { var def = defn.name.definition(); var_defs_by_id.add(def.id, defn); - if ((!drop_vars || (node instanceof AST_Const ? def.redefined() : def.const_redefs)) + var redef = def.redefined(); + if (redef && node instanceof AST_Var) var_defs_by_id.add(redef.id, defn); + if ((!drop_vars || (node instanceof AST_Const ? redef : def.const_redefs)) && !(def.id in in_use_ids)) { in_use_ids[def.id] = true; in_use.push(def); diff --git a/test/compress/functions.js b/test/compress/functions.js index 4e65b128..4ed0dc1b 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -5076,3 +5076,42 @@ issue_4186: { } expect_stdout: "function" } + +issue_4233: { + options = { + functions: true, + reduce_vars: true, + unused: true, + } + input: { + (function() { + try { + var a = function() {}; + try { + throw 42; + } catch (a) { + (function() { + console.log(typeof a); + })(); + var a; + } + } catch (e) {} + })(); + } + expect: { + (function() { + try { + var a = function() {}; + try { + throw 42; + } catch (a) { + (function() { + console.log(typeof a); + })(); + var a; + } + } catch (e) {} + })(); + } + expect_stdout: "number" +} -- 2.34.1