fix corner case in `booleans` & `inline` (#5229)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 21 Dec 2021 15:46:20 +0000 (15:46 +0000)
committerGitHub <noreply@github.com>
Tue, 21 Dec 2021 15:46:20 +0000 (23:46 +0800)
fixes #5228

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

index e4748a3..850866c 100644 (file)
@@ -12789,6 +12789,7 @@ Compressor.prototype.compress = function(node) {
             var inlined = self.expression.try_inline(compressor, scope);
             if (!inlined) return;
             scan_local_returns(inlined, function(node) {
+                node.in_bool = false;
                 var value = node.value;
                 if (op == "void") {
                     if (!value) return;
index 17b0f15..1bb3c99 100644 (file)
@@ -697,3 +697,30 @@ issue_5041_2: {
     }
     expect_stdout: "PASS"
 }
+
+issue_5228: {
+    options = {
+        booleans: true,
+        evaluate: true,
+        inline: true,
+        passes: 2,
+    }
+    input: {
+        console.log(function() {
+            return !function() {
+                do {
+                    return null;
+                } while (console);
+            }();
+        }());
+    }
+    expect: {
+        console.log(function() {
+            do {
+                return !0;
+            } while (console);
+            return !0;
+        }());
+    }
+    expect_stdout: "true"
+}