fix corner cases in collapse_vars & dead_code (#4285)

fixes #4284
This commit is contained in:
Alex Lam S.L
2020-11-17 08:23:50 +00:00
committed by GitHub
parent 2a612fd472
commit 8a83c8dd46
2 changed files with 68 additions and 4 deletions

View File

@@ -845,7 +845,7 @@ merge(Compressor.prototype, {
if (init instanceof AST_Definitions) {
init.definitions[0].name.match_symbol(function(node) {
if (node instanceof AST_SymbolDeclaration) node.definition().fixed = false;
});
}, true);
} else if (init instanceof AST_SymbolRef) {
init.definition().fixed = false;
}
@@ -1188,11 +1188,12 @@ merge(Compressor.prototype, {
AST_Node.DEFMETHOD("match_symbol", function(predicate) {
return predicate(this);
});
AST_Destructured.DEFMETHOD("match_symbol", function(predicate) {
AST_Destructured.DEFMETHOD("match_symbol", function(predicate, allow_computed_keys) {
var found = false;
var tw = new TreeWalker(function(node) {
if (found) return true;
if (node instanceof AST_DestructuredKeyVal) {
if (!allow_computed_keys && node.key instanceof AST_Node) return found = true;
node.value.walk(tw);
return true;
}
@@ -7045,7 +7046,7 @@ merge(Compressor.prototype, {
name: node,
value: make_value(compressor, node)
}));
});
}, true);
});
return dropped;
};
@@ -7107,7 +7108,7 @@ merge(Compressor.prototype, {
if (node instanceof AST_SymbolDeclaration) {
return !node.fixed_value() || may_overlap(compressor, node.definition());
}
});
}, true);
}) ? to_var(self) : self;
}
@@ -9061,6 +9062,7 @@ merge(Compressor.prototype, {
def.fixed = false;
return strip_assignment();
} else if (parent instanceof AST_VarDef) {
if (!(parent.name instanceof AST_SymbolDeclaration)) continue;
if (parent.name.definition() !== def) continue;
if (in_try(level, parent)) break;
def.fixed = false;

View File

@@ -1341,3 +1341,65 @@ issue_4282: {
expect_stdout: true
node_version: ">=6"
}
issue_4284_1: {
options = {
dead_code: true,
}
input: {
var a, {
0: b,
} = a = "foo";
console.log(a, b);
}
expect: {
var a, {
0: b,
} = a = "foo";
console.log(a, b);
}
expect_stdout: "foo f"
node_version: ">=6"
}
issue_4284_2: {
options = {
collapse_vars: true,
}
input: {
var a, {
[console.log(a)]: b,
} = (a = "PASS", 0);
var c = a;
}
expect: {
var a, {
[console.log(a)]: b,
} = (a = "PASS", 0);
var c = a;
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_4284_3: {
options = {
collapse_vars: true,
}
input: {
var a, b;
({
[console.log(a)]: b,
} = (a = "PASS", 0));
var c = a;
}
expect: {
var a, b;
({
[console.log(a)]: b,
} = (a = "PASS", 0));
var c = a;
}
expect_stdout: "PASS"
node_version: ">=6"
}