fix corner case in `merge_vars` (#4407)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 18 Dec 2020 16:52:37 +0000 (16:52 +0000)
committerGitHub <noreply@github.com>
Fri, 18 Dec 2020 16:52:37 +0000 (00:52 +0800)
fixes #4406

lib/compress.js
test/compress/async.js

index 1249e62..ab68c45 100644 (file)
@@ -4801,7 +4801,7 @@ merge(Compressor.prototype, {
             if (node instanceof AST_Call) {
                 var exp = node.expression;
                 var tail = exp.tail_node();
-                if (!(tail instanceof AST_Function)) return;
+                if (!is_function(tail)) return;
                 if (exp !== tail) exp.expressions.slice(0, -1).forEach(function(node) {
                     node.walk(tw);
                 });
index 79189c7..4fd16ef 100644 (file)
@@ -567,3 +567,33 @@ issue_4377: {
     expect_stdout: "function"
     node_version: ">=8"
 }
+
+issue_4406: {
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        A = "PASS";
+        B = "FAIL";
+        (function() {
+            var a, b;
+            a = A;
+            (async function({
+                [console.log(a)]: {},
+            }) {})((b = B) && { undefined: b });
+        })();
+    }
+    expect: {
+        A = "PASS";
+        B = "FAIL";
+        (function() {
+            var a, b;
+            a = A;
+            (async function({
+                [console.log(a)]: {},
+            }) {})((b = B) && { undefined: b });
+        })();
+    }
+    expect_stdout: "PASS"
+    node_version: ">=8"
+}