fix corner case in `unused` (#4457)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 25 Dec 2020 12:10:58 +0000 (12:10 +0000)
committerGitHub <noreply@github.com>
Fri, 25 Dec 2020 12:10:58 +0000 (20:10 +0800)
fixes #4456

lib/compress.js
test/compress/destructured.js

index 0718e5c..1dc01f9 100644 (file)
@@ -5568,13 +5568,11 @@ merge(Compressor.prototype, {
                     if (def.value) def.value = def.value.transform(tt);
                     if (def.name instanceof AST_Destructured) {
                         var name = trim_destructured(def.name, def.value, function(node) {
-                            if (node instanceof AST_SymbolDeclaration) {
-                                if (!drop_vars) return node;
-                                if (node.definition().id in in_use_ids) return node;
-                                if (is_catch(node)) return node;
-                                if (is_var && !can_drop_symbol(node)) return node;
-                                return null;
-                            }
+                            if (!drop_vars) return node;
+                            if (node.definition().id in in_use_ids) return node;
+                            if (is_catch(node)) return node;
+                            if (is_var && !can_drop_symbol(node)) return node;
+                            return null;
                         });
                         if (name) {
                             flush();
@@ -5747,7 +5745,7 @@ merge(Compressor.prototype, {
                 descend(node, tt);
                 if (node.left instanceof AST_Destructured) {
                     var lhs = trim_destructured(node.left, node.right, function(node) {
-                        if (node instanceof AST_SymbolRef) return node;
+                        return node;
                     });
                     if (!lhs) return node.right;
                     node.left = lhs;
index 7fe2f0c..98e84f4 100644 (file)
@@ -2164,3 +2164,36 @@ issue_4446: {
     expect_stdout: "PASS"
     node_version: ">=6"
 }
+
+issue_4456: {
+    options = {
+        pure_getters: true,
+        unused: true,
+    }
+    input: {
+        var o = {
+            set p(v) {
+                console.log(v);
+            },
+        };
+        [ function() {
+            try {
+                return o;
+            } catch ({}) {}
+        }().p ] = [ "PASS" ];
+    }
+    expect: {
+        var o = {
+            set p(v) {
+                console.log(v);
+            },
+        };
+        [ function() {
+            try {
+                return o;
+            } catch ({}) {}
+        }().p ] = [ "PASS" ];
+    }
+    expect_stdout: "PASS"
+    node_version: ">=6"
+}