fix corner case `reduce_vars` (#4300)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 18 Nov 2020 17:11:28 +0000 (17:11 +0000)
committerGitHub <noreply@github.com>
Wed, 18 Nov 2020 17:11:28 +0000 (01:11 +0800)
fixes #4297

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

index 49c1572..0f1342f 100644 (file)
@@ -681,6 +681,7 @@ merge(Compressor.prototype, {
                         && can_drop_symbol(sym) && safe_to_assign(tw, d)) {
                         push_ref(d, sym);
                         mark(tw, d);
+                        if (d.single_use && left instanceof AST_Destructured) d.single_use = false;
                         tw.loop_ids[d.id] = tw.in_loop;
                         mark_escaped(tw, d, sym.scope, node, node.right, 0, 1);
                         sym.fixed = d.fixed = fixed;
index cebb70a..8671d87 100644 (file)
@@ -1503,6 +1503,25 @@ issue_4294: {
     node_version: ">=6"
 }
 
+issue_4297: {
+    options = {
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        console.log(typeof function(a) {
+            return { a } = a;
+        }(function() {}));
+    }
+    expect: {
+        console.log(typeof function(a) {
+            return { a } = a;
+        }(function() {}));
+    }
+    expect_stdout: "function"
+    node_version: ">=6"
+}
+
 issue_4298: {
     options = {
         merge_vars: true,