fix corner case in conditionals (#5723)

fixes #5722
This commit is contained in:
Alex Lam S.L
2022-10-28 17:17:59 +01:00
committed by GitHub
parent 30bf068768
commit 7270671687
2 changed files with 29 additions and 5 deletions

View File

@@ -11634,10 +11634,14 @@ Compressor.prototype.compress = function(node) {
});
self.right = rhs.right;
if (compressor) {
self.left = self.left.transform(compressor);
} else if (self.operator == rhs.left.operator) {
swap_chain(self.left);
var left = self.left.transform(compressor);
if (left !== self.left) {
self = self.clone();
self.left = left;
}
return self;
}
if (self.operator == rhs.left.operator) swap_chain(self.left);
}
OPT(AST_Binary, function(self, compressor) {
@@ -11825,7 +11829,7 @@ Compressor.prototype.compress = function(node) {
// x && (y && z) ---> x && y && z
// w || (x, y || z) ---> w || (x, y) || z
var rhs = self.right.tail_node();
if (rhs instanceof AST_Binary && self.operator == rhs.operator) swap_chain(self, compressor);
if (rhs instanceof AST_Binary && self.operator == rhs.operator) self = swap_chain(self, compressor);
}
if (compressor.option("strings") && self.operator == "+") {
// "foo" + 42 + "" ---> "foo" + 42
@@ -11858,7 +11862,7 @@ Compressor.prototype.compress = function(node) {
&& (self.left.is_string(compressor) && rhs.is_string(compressor)
|| rhs.left.is_string(compressor)
&& (self.left.is_constant() || !rhs.right.has_side_effects(compressor)))) {
swap_chain(self, compressor);
self = swap_chain(self, compressor);
}
}
if (compressor.option("evaluate")) {