fix corner case in `comparisons` (#3414)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 14 May 2019 17:01:18 +0000 (01:01 +0800)
committerGitHub <noreply@github.com>
Tue, 14 May 2019 17:01:18 +0000 (01:01 +0800)
fixes #3413

lib/compress.js
test/compress/comparisons.js

index 3bb6cb2..f7730cd 100644 (file)
@@ -2348,7 +2348,7 @@ merge(Compressor.prototype, {
               case "&&":
                 return this.left.is_defined(compressor) && this.right.is_defined(compressor);
               case "||":
-                return this.left.is_defined(compressor) || this.right.is_defined(compressor);
+                return this.left.is_truthy() || this.right.is_defined(compressor);
               default:
                 return true;
             }
@@ -2368,7 +2368,7 @@ merge(Compressor.prototype, {
             if (this.is_immutable()) return true;
             var fixed = this.fixed_value();
             if (!fixed) return false;
-            this.is_defined = return_true;
+            this.is_defined = return_false;
             var result = fixed.is_defined(compressor);
             delete this.is_defined;
             return result;
index ef0db00..461f415 100644 (file)
@@ -380,3 +380,20 @@ unsafe_indexOf: {
     }
     expect_stdout: "PASS"
 }
+
+issue_3413: {
+    options = {
+        comparisons: true,
+        evaluate: true,
+        side_effects: true,
+    }
+    input: {
+        var b;
+        void 0 !== ("" < b || void 0) || console.log("PASS");
+    }
+    expect: {
+        var b;
+        void 0 !== ("" < b || void 0) || console.log("PASS");
+    }
+    expect_stdout: "PASS"
+}