fix corner cases in reduce_vars & unused (#4306)

This commit is contained in:
Alex Lam S.L
2020-11-19 03:25:36 +00:00
committed by GitHub
parent 134ef0b1eb
commit 641406d491
3 changed files with 105 additions and 2 deletions

View File

@@ -1085,7 +1085,10 @@ merge(Compressor.prototype, {
tw.loop_ids[d.id] = tw.in_loop; tw.loop_ids[d.id] = tw.in_loop;
d.fixed = fixed; d.fixed = fixed;
d.fixed.assigns = [ node ]; 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 { } else {
d.fixed = false; d.fixed = false;
} }
@@ -5352,7 +5355,7 @@ merge(Compressor.prototype, {
return; return;
} }
var sym = def.name.definition(); 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 (!drop_sym || !drop_vars || sym.id in in_use_ids) {
if (def.value && indexOf_assign(sym, def) < 0) { if (def.value && indexOf_assign(sym, def) < 0) {
var write_only = def.value.write_only; var write_only = def.value.write_only;

View File

@@ -1257,3 +1257,51 @@ issue_4290_1: {
} }
expect_stdout: true 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
}

View File

@@ -1134,3 +1134,55 @@ issue_4290_2: {
expect_stdout: "PASS" expect_stdout: "PASS"
node_version: ">=4" 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"
}