fix corner case in `reduce_vars` (#4796)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 17 Mar 2021 21:14:14 +0000 (21:14 +0000)
committerGitHub <noreply@github.com>
Wed, 17 Mar 2021 21:14:14 +0000 (05:14 +0800)
lib/compress.js
test/compress/spreads.js

index f8b9c8c..0d4f7ab 100644 (file)
@@ -624,6 +624,7 @@ merge(Compressor.prototype, {
             if (parent instanceof AST_Binary) return lazy_op[parent.operator];
             if (parent instanceof AST_Conditional) return parent.condition !== node;
             if (parent instanceof AST_Sequence) return parent.tail_node() === node;
+            if (parent instanceof AST_Spread) return true;
         }
 
         function mark_escaped(tw, d, scope, node, value, level, depth) {
index f8c0d59..02bb3f0 100644 (file)
@@ -294,6 +294,31 @@ reduce_vars_2: {
     node_version: ">=6"
 }
 
+reduce_vars_3: {
+    options = {
+        reduce_funcs: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        function f() {}
+        function g() {
+            return (a => a)(...[ f ]);
+        }
+        console.log(g() === g() ? "PASS" : "FAIL");
+    }
+    expect: {
+        function f() {}
+        function g() {
+            return (a => a)(...[ f ]);
+        }
+        console.log(g() === g() ? "PASS" : "FAIL");
+    }
+    expect_stdout: "PASS"
+    node_version: ">=6"
+}
+
 convert_setter: {
     options = {
         objects: true,