fix corner case in conditionals (#3244)
This commit is contained in:
@@ -6048,14 +6048,15 @@ merge(Compressor.prototype, {
|
|||||||
// v
|
// v
|
||||||
// exp = foo ? something : something_else;
|
// exp = foo ? something : something_else;
|
||||||
var seq_tail = consequent.tail_node();
|
var seq_tail = consequent.tail_node();
|
||||||
var alt_tail = alternative.tail_node();
|
if (seq_tail instanceof AST_Assign) {
|
||||||
if (seq_tail instanceof AST_Assign
|
var is_eq = seq_tail.operator == "=";
|
||||||
|
var alt_tail = is_eq ? alternative.tail_node() : alternative;
|
||||||
|
if ((is_eq || consequent instanceof AST_Assign)
|
||||||
&& alt_tail instanceof AST_Assign
|
&& alt_tail instanceof AST_Assign
|
||||||
&& seq_tail.operator == alt_tail.operator
|
&& seq_tail.operator == alt_tail.operator
|
||||||
&& seq_tail.left.equivalent_to(alt_tail.left)
|
&& seq_tail.left.equivalent_to(alt_tail.left)
|
||||||
&& (!condition.has_side_effects(compressor)
|
&& (!condition.has_side_effects(compressor)
|
||||||
|| seq_tail.operator == "="
|
|| is_eq && !seq_tail.left.has_side_effects(compressor))) {
|
||||||
&& !seq_tail.left.has_side_effects(compressor))) {
|
|
||||||
return make_node(AST_Assign, self, {
|
return make_node(AST_Assign, self, {
|
||||||
operator: seq_tail.operator,
|
operator: seq_tail.operator,
|
||||||
left: seq_tail.left,
|
left: seq_tail.left,
|
||||||
@@ -6066,6 +6067,7 @@ merge(Compressor.prototype, {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// x ? y(a) : y(b) --> y(x ? a : b)
|
// x ? y(a) : y(b) --> y(x ? a : b)
|
||||||
var arg_index;
|
var arg_index;
|
||||||
if (consequent instanceof AST_Call
|
if (consequent instanceof AST_Call
|
||||||
|
|||||||
@@ -1364,3 +1364,23 @@ cond_seq_assign_2: {
|
|||||||
"42",
|
"42",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cond_seq_assign_3: {
|
||||||
|
options = {
|
||||||
|
conditionals: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var c = 0;
|
||||||
|
if (this)
|
||||||
|
c = 1 + c, c = c + 1;
|
||||||
|
else
|
||||||
|
c = 1 + c, c = c + 1;
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = 0;
|
||||||
|
this, c = 1 + c, c += 1;
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "2"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user