fix corner case in unused (#4185)

fixes #4184
This commit is contained in:
Alex Lam S.L
2020-10-05 11:59:03 +01:00
committed by GitHub
parent b7a57fc69d
commit b91a2459c0
2 changed files with 38 additions and 1 deletions

View File

@@ -5133,6 +5133,13 @@ merge(Compressor.prototype, {
return rhs.right; return rhs.right;
} }
function cross_scope(def, sym) {
do {
if (def === sym) return false;
if (sym instanceof AST_Scope) return true;
} while (sym = sym.parent_scope);
}
function scan_ref_scoped(node, descend, init) { function scan_ref_scoped(node, descend, init) {
if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef) { if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef) {
var def = node.left.definition(); var def = node.left.definition();
@@ -5186,7 +5193,7 @@ merge(Compressor.prototype, {
in_use_ids[node_def.id] = true; in_use_ids[node_def.id] = true;
in_use.push(node_def); in_use.push(node_def);
} }
if (node.scope !== node_def.scope) { if (cross_scope(node_def.scope, node.scope)) {
var redef = node_def.redefined(); var redef = node_def.redefined();
if (redef && !(redef.id in in_use_ids)) { if (redef && !(redef.id in in_use_ids)) {
in_use_ids[redef.id] = true; in_use_ids[redef.id] = true;

View File

@@ -3055,3 +3055,33 @@ single_use_catch_redefined: {
} }
expect_stdout: true expect_stdout: true
} }
issue_4184: {
options = {
reduce_vars: true,
unused: true,
}
input: {
(function() {
var a = function() {}, b = [ a, 1 && b, a = {} ];
try {
throw 42;
} catch (a) {
{
console.log(a);
}
}
})();
}
expect: {
(function() {
var b = [ function() {}, 1 && b, {} ];
try {
throw 42;
} catch (a) {
console.log(a);
}
})();
}
expect_stdout: "42"
}