fix corner case in reduce_vars & unused (#4208)

fixes #4207
This commit is contained in:
Alex Lam S.L
2020-10-13 00:32:17 +01:00
committed by GitHub
parent 9272f662c0
commit 176c09c6a5
2 changed files with 29 additions and 9 deletions

View File

@@ -165,10 +165,12 @@ Compressor.prototype = new TreeTransformer;
merge(Compressor.prototype, {
option: function(key) { return this.options[key] },
exposed: function(def) {
if (def.global) for (var i = 0; i < def.orig.length; i++)
if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? "funcs" : "vars"])
return true;
return def.undeclared;
if (def.undeclared) return true;
if (!(def.global || def.scope.resolve() instanceof AST_Toplevel)) return false;
var toplevel = this.toplevel;
return !all(def.orig, function(sym) {
return toplevel[sym instanceof AST_SymbolDefun ? "funcs" : "vars"];
});
},
compress: function(node) {
node = node.resolve_defines(this);
@@ -6642,13 +6644,10 @@ merge(Compressor.prototype, {
var node = defn.name;
if (!node.fixed_value()) return false;
var def = node.definition();
if (compressor.exposed(def)) return false;
var scope = def.scope.resolve();
if (scope instanceof AST_Toplevel) {
if (!compressor.toplevel.vars) return false;
if (def.scope === scope) return true;
return !scope.variables.has(node.name) && !scope.globals.has(node.name);
}
if (def.scope === scope) return true;
if (scope instanceof AST_Toplevel) return !scope.variables.has(node.name) && !scope.globals.has(node.name);
var s = def.scope;
do {
s = s.parent_scope;

View File

@@ -909,3 +909,24 @@ issue_4205: {
}
expect_stdout: true
}
issue_4207: {
options = {
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
{
const a = function() {};
console.log(a.length);
}
}
expect: {
{
const a = function() {};
console.log(a.length);
}
}
expect_stdout: "0"
}