aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-11-19 03:25:36 +0000
committerGitHub <noreply@github.com>2020-11-19 11:25:36 +0800
commit641406d4910a8991cbd41b0814fedd5f38958850 (patch)
treebc68e1bbc75b2aab74c3291046b5ae2961eb0934
parent134ef0b1eb5e7ec0fc02e3aa0f36e319b4b82ac4 (diff)
downloadtracifyjs-641406d4910a8991cbd41b0814fedd5f38958850.tar.gz
tracifyjs-641406d4910a8991cbd41b0814fedd5f38958850.zip
fix corner cases in `reduce_vars` & `unused` (#4306)
-rw-r--r--lib/compress.js7
-rw-r--r--test/compress/const.js48
-rw-r--r--test/compress/let.js52
3 files changed, 105 insertions, 2 deletions
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"
+}