From: Alex Lam S.L Date: Thu, 19 Nov 2020 03:25:36 +0000 (+0000) Subject: fix corner cases in `reduce_vars` & `unused` (#4306) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=641406d4910a8991cbd41b0814fedd5f38958850;p=UglifyJS.git fix corner cases in `reduce_vars` & `unused` (#4306) --- diff --git a/lib/compress.js b/lib/compress.js index f5dd73cc..23eb5e44 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1085,7 +1085,10 @@ merge(Compressor.prototype, { tw.loop_ids[d.id] = tw.in_loop; d.fixed = fixed; d.fixed.assigns = [ node ]; - if (name instanceof AST_SymbolConst && d.redefined()) d.single_use = false; + if (name instanceof AST_SymbolConst && d.redefined() + || !(can_drop_symbol(name) || is_safe_lexical(d))) { + d.single_use = false; + } } else { d.fixed = false; } @@ -5352,7 +5355,7 @@ merge(Compressor.prototype, { return; } var sym = def.name.definition(); - var drop_sym = !is_var || can_drop_symbol(def.name); + var drop_sym = is_var ? can_drop_symbol(def.name) : is_safe_lexical(sym); if (!drop_sym || !drop_vars || sym.id in in_use_ids) { if (def.value && indexOf_assign(sym, def) < 0) { var write_only = def.value.write_only; diff --git a/test/compress/const.js b/test/compress/const.js index 7e393d4f..8dbe74da 100644 --- a/test/compress/const.js +++ b/test/compress/const.js @@ -1257,3 +1257,51 @@ issue_4290_1: { } expect_stdout: true } + +issue_4305_1: { + options = { + reduce_vars: true, + unused: true, + } + input: { + (function() { + const arguments = function() { + while (console.log("PASS")); + }; + arguments(); + })(); + } + expect: { + (function() { + const arguments = function() { + while (console.log("PASS")); + }; + arguments(); + })(); + } + expect_stdout: true +} + +issue_4305_2: { + options = { + reduce_vars: true, + unused: true, + } + input: { + (function(a) { + const a = function() { + while (console.log("aaaaa")); + }; + a(); + })(); + } + expect: { + (function(a) { + const a = function() { + while (console.log("aaaaa")); + }; + a(); + })(); + } + expect_stdout: true +} diff --git a/test/compress/let.js b/test/compress/let.js index 0669b36f..76641c3f 100644 --- a/test/compress/let.js +++ b/test/compress/let.js @@ -1134,3 +1134,55 @@ issue_4290_2: { expect_stdout: "PASS" node_version: ">=4" } + +issue_4305_1: { + options = { + reduce_vars: true, + unused: true, + } + input: { + (function() { + let arguments = function() { + while (console.log("PASS")); + }; + arguments(); + })(); + } + expect: { + (function() { + let arguments = function() { + while (console.log("PASS")); + }; + arguments(); + })(); + } + expect_stdout: true + node_version: ">=6" +} + +issue_4305_2: { + options = { + reduce_vars: true, + unused: true, + } + input: { + "use strict"; + (function(a) { + let a = function() { + while (console.log("aaaaa")); + }; + a(); + })(); + } + expect: { + "use strict"; + (function(a) { + let a = function() { + while (console.log("aaaaa")); + }; + a(); + })(); + } + expect_stdout: true + node_version: ">=4" +}