fix corner case in `rests` (#4539)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 12 Jan 2021 01:12:30 +0000 (01:12 +0000)
committerGitHub <noreply@github.com>
Tue, 12 Jan 2021 01:12:30 +0000 (09:12 +0800)
fixes #4538

lib/compress.js
test/compress/rests.js

index 5526972..e998554 100644 (file)
@@ -7778,8 +7778,9 @@ merge(Compressor.prototype, {
         if (!all(args, function(arg) {
             return !(arg instanceof AST_Spread);
         })) return;
+        var is_iife = fn === exp && !fn.name;
         if (fn.rest) {
-            if (!compressor.option("rests")) return;
+            if (!(is_iife && compressor.option("rests"))) return;
             var insert = fn.argnames.length;
             for (var i = args.length; i < insert; i++) {
                 args[i] = make_node(AST_Undefined, call).optimize(compressor);
@@ -7789,7 +7790,6 @@ merge(Compressor.prototype, {
             fn.rest = null;
         }
         var pos = 0, last = 0;
-        var is_iife = fn === exp && !fn.name;
         var drop_defaults = is_iife && compressor.option("default_values");
         var drop_fargs = is_iife && compressor.drop_fargs(fn, call) ? function(argname, arg) {
             if (!argname) return true;
index f3c2af9..e322112 100644 (file)
@@ -525,3 +525,22 @@ issue_4525_2: {
     expect_stdout: "PASS"
     node_version: ">=6"
 }
+
+issue_4538: {
+    options = {
+        rests: true,
+        unused: true,
+    }
+    input: {
+        console.log(typeof function f(...a) {
+            return a.p, f;
+        }()());
+    }
+    expect: {
+        console.log(typeof function f(...a) {
+            return a.p, f;
+        }()());
+    }
+    expect_stdout: "function"
+    node_version: ">=6"
+}