Skip to content

Commit

Permalink
fix corner case in conditionals (#5723)
Browse files Browse the repository at this point in the history
fixes #5722
  • Loading branch information
alexlamsl committed Oct 28, 2022
1 parent 30bf068 commit 7270671
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
14 changes: 9 additions & 5 deletions lib/compress.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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")) {
Expand Down
20 changes: 20 additions & 0 deletions test/compress/conditionals.js
Original file line number Diff line number Diff line change
Expand Up @@ -3068,3 +3068,23 @@ issue_5712: {
}
expect_stdout: "PASS"
}

issue_5722: {
options = {
conditionals: true,
evaluate: true,
keep_fnames: true,
side_effects: true,
}
input: {
var a = true;
a && function f() {
return 42;
}(a++) ? null + (console.log("PASS") && a++) : "";
}
expect: {
var a = true;
a && (void a++, console.log("PASS")) && a++;
}
expect_stdout: "PASS"
}

0 comments on commit 7270671

Please sign in to comment.