fix corner case in `booleans` (#3691)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 27 Jan 2020 18:04:44 +0000 (02:04 +0800)
committerGitHub <noreply@github.com>
Mon, 27 Jan 2020 18:04:44 +0000 (02:04 +0800)
fixes #3690

lib/compress.js
test/compress/booleans.js

index a3baa7b..4e967ae 100644 (file)
@@ -4453,7 +4453,7 @@ merge(Compressor.prototype, {
                 var ev = value.is_truthy() || value.tail_node().evaluate(compressor);
                 if (!ev) {
                     value = value.drop_side_effect_free(compressor);
-                    if (node.value !== value) node.value = value ? make_sequence(node.value, [
+                    node.value = value ? make_sequence(node.value, [
                         value,
                         make_node(AST_Number, node.value, {
                             value: 0
@@ -4461,7 +4461,7 @@ merge(Compressor.prototype, {
                     ]) : null;
                 } else if (ev && !(ev instanceof AST_Node)) {
                     value = value.drop_side_effect_free(compressor);
-                    if (node.value !== value) node.value = value ? make_sequence(node.value, [
+                    node.value = value ? make_sequence(node.value, [
                         value,
                         make_node(AST_Number, node.value, {
                             value: 1
index e1fa1a4..6e7988b 100644 (file)
@@ -131,3 +131,25 @@ issue_3658: {
     }
     expect_stdout: "PASS"
 }
+
+issue_3690: {
+    options = {
+        booleans: true,
+        unused: true,
+    }
+    input: {
+        console.log(function(a) {
+            return function() {
+                return a = [ this ];
+            }() ? "PASS" : "FAIL";
+        }());
+    }
+    expect: {
+        console.log(function(a) {
+            return function() {
+                return 1;
+            }() ? "PASS" : "FAIL";
+        }());
+    }
+    expect_stdout: "PASS"
+}