fix corner case in reduce_vars

fixes #4489
This commit is contained in:
alexlamsl 2021-01-01 11:01:13 +08:00
parent 311c074622
commit 1ab8fcdeab
3 changed files with 30 additions and 8 deletions

View File

@ -9427,8 +9427,7 @@ merge(Compressor.prototype, {
}
}));
} else {
value = fixed.optimize(compressor);
if (value === fixed) value = value.transform(new TreeTransformer(function(node, descend) {
value = fixed.optimize(compressor).transform(new TreeTransformer(function(node, descend) {
if (node instanceof AST_Scope) return node;
node = node.clone();
descend(node, this);

View File

@ -158,3 +158,22 @@ issue_4487: {
}
expect_stdout: "undefined"
}
issue_4489: {
options = {
collapse_vars: true,
evaluate: true,
hoist_vars: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
A = 0;
var o = !0 || null;
for (var k in o);
}
expect: {
for (var k in !(A = 0));
}
}

View File

@ -322,7 +322,16 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
}
else if (node instanceof U.AST_Object) {
// first property's value
var expr = node.properties[0] instanceof U.AST_ObjectKeyVal && node.properties[0].value;
var expr = node.properties[0];
if (expr instanceof U.AST_ObjectKeyVal) {
expr = expr.value;
} else if (expr instanceof U.AST_Spread) {
expr = expr.expression;
} else if (expr && expr.key instanceof U.AST_Node) {
expr = expr.key;
} else {
expr = null;
}
if (expr) {
node.start._permute++;
CHANGED = true;
@ -351,11 +360,6 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
}
}
}
else if (node instanceof U.AST_Spread) {
node.start._permute++;
CHANGED = true;
return node.expression;
}
else if (node instanceof U.AST_Switch) {
var expr = [
node.expression, // switch expression