fix corner case in `dead_code` (#4378)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sun, 13 Dec 2020 16:03:44 +0000 (16:03 +0000)
committerGitHub <noreply@github.com>
Sun, 13 Dec 2020 16:03:44 +0000 (00:03 +0800)
fixes #4377

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

index db91155..3e70f2e 100644 (file)
@@ -3016,7 +3016,7 @@ merge(Compressor.prototype, {
     }
 
     function extract_declarations_from_unreachable_code(compressor, stat, target) {
-        if (!(stat instanceof AST_Definitions || stat instanceof AST_Defun)) {
+        if (!(stat instanceof AST_Definitions || is_defun(stat))) {
             AST_Node.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start);
         }
         var block;
@@ -3032,7 +3032,7 @@ merge(Compressor.prototype, {
                 }
                 return true;
             }
-            if (node instanceof AST_Defun) {
+            if (is_defun(node)) {
                 push(node);
                 return true;
             }
index 71df244..8b7f596 100644 (file)
@@ -471,3 +471,28 @@ issue_4359: {
     expect_stdout: "PASS"
     node_version: ">=8"
 }
+
+issue_4377: {
+    options = {
+        dead_code: true,
+        inline: true,
+        side_effects: true,
+    }
+    input: {
+        console.log(typeof function() {
+            return function() {
+                f;
+                async function f() {}
+                return f();
+            }();
+        }().then);
+    }
+    expect: {
+        console.log(typeof function() {
+            return f();
+            async function f() {}
+        }().then);
+    }
+    expect_stdout: "function"
+    node_version: ">=8"
+}