diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-10-22 03:13:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-22 10:13:11 +0800 |
commit | 23ca7d675f5c7bbd80571ce40b8d951831d359ad (patch) | |
tree | 48cfea7fb69cc8d6aa330d1d4d5ece5be87a75d9 | |
parent | fd8c0212b8d81b4f1630155bb170214ce87d0e70 (diff) | |
download | tracifyjs-23ca7d675f5c7bbd80571ce40b8d951831d359ad.tar.gz tracifyjs-23ca7d675f5c7bbd80571ce40b8d951831d359ad.zip |
fix corner case in `functions` (#4234)
fixes #4233
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | test/compress/functions.js | 39 |
2 files changed, 42 insertions, 1 deletions
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" +} |