fix corner case in reduce_funcs (#5049)

fixes #5048
This commit is contained in:
Alex Lam S.L 2021-07-04 08:09:05 +01:00 committed by GitHub
parent f4ae267920
commit f5dbb672b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 2 deletions

View File

@ -10913,9 +10913,10 @@ merge(Compressor.prototype, {
return self; return self;
}); });
function recursive_ref(compressor, def) { function recursive_ref(compressor, def, fn) {
var level = 0, node = compressor.self(); var level = 0, node = compressor.self();
do { do {
if (node === fn) return node;
if (is_lambda(node) && node.name && node.name.definition() === def) return node; if (is_lambda(node) && node.name && node.name.definition() === def) return node;
} while (node = compressor.parent(level++)); } while (node = compressor.parent(level++));
} }
@ -10951,7 +10952,7 @@ merge(Compressor.prototype, {
if ((def.scope !== self.scope.resolve() || def.in_loop) if ((def.scope !== self.scope.resolve() || def.in_loop)
&& (!compressor.option("reduce_funcs") || def.escaped.depth == 1 || fixed.inlined)) { && (!compressor.option("reduce_funcs") || def.escaped.depth == 1 || fixed.inlined)) {
single_use = false; single_use = false;
} else if (recursive_ref(compressor, def)) { } else if (recursive_ref(compressor, def, fixed)) {
single_use = false; single_use = false;
} else if (fixed.name && fixed.name.definition() !== def) { } else if (fixed.name && fixed.name.definition() !== def) {
single_use = false; single_use = false;

View File

@ -7677,3 +7677,22 @@ issue_4949: {
} }
expect_stdout: "0 1" expect_stdout: "0 1"
} }
issue_5048: {
options = {
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function() {
var a = function() {
return a + 42;
};
}());
}
expect: {
console.log(function() {}());
}
expect_stdout: "undefined"
}