fix corner case in reduce_vars (#4490)

fixes #4489
This commit is contained in:
Alex Lam S.L
2021-01-01 04:56:13 +00:00
committed by GitHub
parent 311c074622
commit 2dbafbb4ee
3 changed files with 30 additions and 8 deletions

View File

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

View File

@@ -158,3 +158,22 @@ issue_4487: {
} }
expect_stdout: "undefined" 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) { else if (node instanceof U.AST_Object) {
// first property's value // 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) { if (expr) {
node.start._permute++; node.start._permute++;
CHANGED = true; 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) { else if (node instanceof U.AST_Switch) {
var expr = [ var expr = [
node.expression, // switch expression node.expression, // switch expression