aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compress.js')
-rw-r--r--lib/compress.js19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/compress.js b/lib/compress.js
index e83524c5..504d270b 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -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){