fix corner case in `unused` (#4682)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 24 Feb 2021 18:17:28 +0000 (18:17 +0000)
committerGitHub <noreply@github.com>
Wed, 24 Feb 2021 18:17:28 +0000 (02:17 +0800)
fixes #4681

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

index 93023e1..263bad0 100644 (file)
@@ -5743,7 +5743,10 @@ merge(Compressor.prototype, {
                         if (prop.key instanceof AST_Node) prop.key.walk(tw);
                         if (!prop.value) return;
                         if (is_export || prop instanceof AST_ClassField && prop.static) {
+                            var save_scope = scope;
+                            scope = node;
                             prop.value.walk(tw);
+                            scope = save_scope;
                         } else {
                             initializations.add(def.id, prop.value);
                         }
@@ -5793,6 +5796,12 @@ merge(Compressor.prototype, {
                     assignments.add(def.id, node);
                     return true;
                 }
+            } else if (node instanceof AST_This && scope instanceof AST_DefClass) {
+                var def = scope.name.definition();
+                if (!(def.id in in_use_ids)) {
+                    in_use_ids[def.id] = true;
+                    in_use.push(def);
+                }
             }
             return scan_ref_scoped(node, descend, true);
         });
index 390ae52..7853609 100644 (file)
@@ -572,3 +572,27 @@ computed_key_generator: {
     expect_stdout: "PASS"
     node_version: ">=4"
 }
+
+issue_4681: {
+    options = {
+        unused: true,
+    }
+    input: {
+        console.log(function(a) {
+            class A {
+                static p = a = this;
+            }
+            return typeof a;
+        }());
+    }
+    expect: {
+        console.log(function(a) {
+            class A {
+                static p = a = this;
+            }
+            return typeof a;
+        }());
+    }
+    expect_stdout: "function"
+    node_version: ">=12"
+}