fix corner case in collapse_vars (#5274)

fixes #5273
This commit is contained in:
Alex Lam S.L 2022-01-07 07:00:23 +00:00 committed by GitHub
parent 58bea676ac
commit be8c75bae1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 8 deletions

View File

@ -1962,21 +1962,27 @@ Compressor.prototype.compress = function(node) {
can_replace = false;
node.right.transform(scanner);
clear_write_only(candidate);
var assign = make_node(AST_Assign, node, {
var folded;
if (abort) {
folded = candidate;
} else {
abort = true;
lhs.definition().fixed = false;
folded = make_node(AST_Binary, candidate, {
operator: compound,
left: lhs,
right: rvalue,
});
}
return make_node(AST_Assign, node, {
operator: "=",
left: node.left,
right: make_node(AST_Binary, node, {
operator: node.operator.slice(0, -1),
left: abort ? candidate : make_node(AST_Binary, candidate, {
operator: compound,
left: lhs,
right: rvalue,
}),
left: folded,
right: node.right,
}),
});
abort = true;
return assign;
}
// Stop immediately if these node types are encountered
if (should_stop(node, parent)) {

View File

@ -9692,3 +9692,32 @@ issue_5182: {
]
node_version: ">=4"
}
issue_5273: {
options = {
collapse_vars: true,
evaluate: true,
inline: true,
reduce_vars: true,
sequences: true,
toplevel: true,
}
input: {
var a = "10", b = 1;
function f(c, d) {
return d;
}
f((b += a, b *= a), f);
console.log(b);
}
expect: {
var a = "10", b = 1;
function f(c, d) {
return d;
}
b = (b + a) * a,
f,
console.log(b);
}
expect_stdout: "1100"
}