Skip to content

Commit

Permalink
fix corner case in comparisons (#4820)
Browse files Browse the repository at this point in the history
fixes #4819
  • Loading branch information
alexlamsl committed Mar 24, 2021
1 parent 78e3936 commit 40ef074
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
21 changes: 13 additions & 8 deletions lib/compress.js
Expand Up @@ -3689,20 +3689,25 @@ merge(Compressor.prototype, {
(function(def) {
def(AST_Node, return_false);
def(AST_Array, return_true);
def(AST_Assign, function(compressor) {
return this.operator != "=" || this.right.is_defined(compressor);
});
def(AST_Binary, function(compressor) {
switch (this.operator) {
function is_binary_defined(compressor, op, node) {
switch (op) {
case "&&":
return this.left.is_defined(compressor) && this.right.is_defined(compressor);
return node.left.is_defined(compressor) && node.right.is_defined(compressor);
case "||":
return this.left.is_truthy() || this.right.is_defined(compressor);
return node.left.is_truthy() || node.right.is_defined(compressor);
case "??":
return this.left.is_defined(compressor) || this.right.is_defined(compressor);
return node.left.is_defined(compressor) || node.right.is_defined(compressor);
default:
return true;
}
}
def(AST_Assign, function(compressor) {
var op = this.operator;
if (op == "=") return this.right.is_defined(compressor);
return is_binary_defined(compressor, op.slice(0, -1), this);
});
def(AST_Binary, function(compressor) {
return is_binary_defined(compressor, this.operator, this);
});
def(AST_Conditional, function(compressor) {
return this.consequent.is_defined(compressor) && this.alternative.is_defined(compressor);
Expand Down
14 changes: 14 additions & 0 deletions test/compress/assignments.js
Expand Up @@ -589,3 +589,17 @@ issue_4815_2: {
expect_stdout: "PASS"
node_version: ">=15"
}

issue_4819: {
options = {
comparisons: true,
}
input: {
console.log(void 0 === ([].p &&= 42));
}
expect: {
console.log(void 0 === ([].p &&= 42));
}
expect_stdout: "true"
node_version: ">=15"
}

0 comments on commit 40ef074

Please sign in to comment.