diff --git a/lib/compress.js b/lib/compress.js index d6159731..6cb155bf 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -11139,9 +11139,15 @@ Compressor.prototype.compress = function(node) { && assign instanceof AST_Assign && assign.operator == "=" && self.left.equivalent_to(assign.left)) { - self.right = assign.right; - assign.right = self; - return assign; + return make_node(AST_Assign, self, { + operator: "=", + left: assign.left, + right: make_node(AST_Binary, self, { + operator: self.operator, + left: self.left, + right: assign.right, + }), + }).optimize(compressor); } } if (compressor.option("comparisons")) switch (self.operator) { diff --git a/test/compress/yields.js b/test/compress/yields.js index 9980fb2a..2e1aab56 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -1525,3 +1525,25 @@ issue_5385_2: { ] node_version: ">=10" } + +issue_5425: { + options = { + assignments: true, + ie: true, + toplevel: true, + unused: true, + yields: true, + } + input: { + var a = "FAIL"; + var b = function* f() {}(a ? a = "PASS" : 42); + console.log(a, typeof f); + } + expect: { + var a = "FAIL"; + (function* f() {})(a && (a = "PASS")); + console.log(a, typeof f); + } + expect_stdout: "PASS undefined" + node_version: ">=4" +}