enhance conditionals (#2966)

- `x ? (y, w) : (z, w)` => `x ? y : z, w`
This commit is contained in:
Alex Lam S.L
2018-02-28 23:34:48 +08:00
committed by GitHub
parent 0daa199fa8
commit 56e2a369d0
3 changed files with 22 additions and 2 deletions

View File

@@ -5727,6 +5727,18 @@ merge(Compressor.prototype, {
consequent
]).optimize(compressor);
}
// x ? (y, w) : (z, w) --> x ? y : z, w
if ((consequent instanceof AST_Sequence || alternative instanceof AST_Sequence)
&& consequent.tail_node().equivalent_to(alternative.tail_node())) {
return make_sequence(self, [
make_node(AST_Conditional, self, {
condition: self.condition,
consequent: pop_seq(consequent),
alternative: pop_seq(alternative)
}),
consequent.tail_node()
]).optimize(compressor);
}
// x ? y || z : z --> x && y || z
if (consequent instanceof AST_Binary
&& consequent.operator == "||"
@@ -5829,6 +5841,13 @@ merge(Compressor.prototype, {
}
}
}
function pop_seq(node) {
if (!(node instanceof AST_Sequence)) return make_node(AST_Number, node, {
value: 0
});
return make_sequence(node, node.expressions.slice(0, -1));
}
});
OPT(AST_Boolean, function(self, compressor){