fix assignment extraction from conditional (#1651)

fixes #1645
fixes #1646
This commit is contained in:
Alex Lam S.L
2017-03-24 18:52:48 +08:00
committed by GitHub
parent f3a1694a41
commit 0432a7abb9
2 changed files with 47 additions and 9 deletions

View File

@@ -3550,19 +3550,17 @@ merge(Compressor.prototype, {
}
var consequent = self.consequent;
var alternative = self.alternative;
// if (foo) exp = something; else exp = something_else;
// |
// v
// exp = foo ? something : something_else;
if (consequent instanceof AST_Assign
&& alternative instanceof AST_Assign
&& consequent.operator == alternative.operator
&& consequent.left.equivalent_to(alternative.left)
&& (!consequent.left.has_side_effects(compressor)
|| !self.condition.has_side_effects(compressor))
) {
/*
* Stuff like this:
* if (foo) exp = something; else exp = something_else;
* ==>
* exp = foo ? something : something_else;
*/
&& (!self.condition.has_side_effects(compressor)
|| consequent.operator == "="
&& !consequent.left.has_side_effects(compressor))) {
return make_node(AST_Assign, self, {
operator: consequent.operator,
left: consequent.left,