fix corner case in `inline` (#5267)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 4 Jan 2022 20:25:48 +0000 (20:25 +0000)
committerGitHub <noreply@github.com>
Tue, 4 Jan 2022 20:25:48 +0000 (04:25 +0800)
fixes #5266

lib/compress.js
test/compress/nullish.js

index 87e0f96..9320d5a 100644 (file)
@@ -12898,8 +12898,8 @@ Compressor.prototype.compress = function(node) {
                     return cond.negate(compressor);
                   case "??":
                     return make_node(AST_Binary, self, {
-                        operator: "===",
-                        left: make_node(AST_Undefined, self).transform(compressor),
+                        operator: "==",
+                        left: make_node(AST_Null, self),
                         right: cond,
                     });
                 }
index be9c752..b141d10 100644 (file)
@@ -274,7 +274,7 @@ inline_binary_nullish: {
         })();
     }
     expect: {
-        if (void 0 === function() {
+        if (null == function() {
             while (console.log("foo"));
         }())
             while (console.log("bar"));
@@ -304,3 +304,42 @@ issue_4679: {
     expect_stdout: "PASS"
     node_version: ">=14"
 }
+
+issue_5266: {
+    options = {
+        inline: true,
+    }
+    input: {
+        [
+            42,
+            null,
+            false,
+            void 0,
+            "FAIL",
+        ].forEach(function (a) {
+            a ?? function() {
+                while (console.log(a));
+            }();
+        });
+    }
+    expect: {
+        [
+            42,
+            null,
+            false,
+            void 0,
+            "FAIL",
+        ].forEach(function (a) {
+            if (null == a) {
+                while (console.log(a));
+                return;
+            } else
+                return;
+        });
+    }
+    expect_stdout: [
+        "null",
+        "undefined",
+    ]
+    node_version: ">=14"
+}