fix corner case in `loops` (#4684)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 24 Feb 2021 20:41:21 +0000 (20:41 +0000)
committerGitHub <noreply@github.com>
Wed, 24 Feb 2021 20:41:21 +0000 (04:41 +0800)
fixes #4683

lib/compress.js
test/compress/classes.js

index 263bad0..5c38e40 100644 (file)
@@ -1512,7 +1512,7 @@ merge(Compressor.prototype, {
             return !is_lexical_definition(stat);
         }) ? thing.body : [ thing ];
         if (thing instanceof AST_EmptyStatement) return [];
-        if (thing instanceof AST_Statement) return [ thing ];
+        if (is_statement(thing)) return [ thing ];
         throw new Error("Can't convert thing to statement array");
     }
 
@@ -3382,7 +3382,7 @@ merge(Compressor.prototype, {
                         return in_list ? List.skip : make_node(AST_EmptyStatement, node);
                     }
                     if (node instanceof AST_Scope) return node;
-                    if (!(node instanceof AST_Statement)) return node;
+                    if (!is_statement(node)) return node;
                 }));
             }
         }
@@ -7504,7 +7504,7 @@ merge(Compressor.prototype, {
                 || first instanceof AST_Continue && external_target(first)
                 || first instanceof AST_Exit)) {
             var body = [];
-            if (self.init instanceof AST_Statement) {
+            if (is_statement(self.init)) {
                 body.push(self.init);
             } else if (self.init) {
                 body.push(make_node(AST_SimpleStatement, self.init, {
@@ -7606,7 +7606,7 @@ merge(Compressor.prototype, {
             if (!cond) {
                 if (compressor.option("dead_code")) {
                     var body = [];
-                    if (self.init instanceof AST_Statement) {
+                    if (is_statement(self.init)) {
                         body.push(self.init);
                     } else if (self.init) {
                         body.push(make_node(AST_SimpleStatement, self.init, {
index 7853609..95b4037 100644 (file)
@@ -596,3 +596,22 @@ issue_4681: {
     expect_stdout: "function"
     node_version: ">=12"
 }
+
+issue_4683: {
+    options = {
+        dead_code: true,
+        evaluate: true,
+        loops: true,
+    }
+    input: {
+        "use strict";
+        for (class extends null {}; void console.log("PASS"); );
+    }
+    expect: {
+        "use strict";
+        (class extends null {});
+        void console.log("PASS");
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}