fix corner case in `keep_fargs` (#3620)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 2 Dec 2019 04:28:17 +0000 (12:28 +0800)
committerGitHub <noreply@github.com>
Mon, 2 Dec 2019 04:28:17 +0000 (12:28 +0800)
fixes #3619

lib/compress.js
test/compress/keep_fargs.js

index 284b79a..2c60a9b 100644 (file)
@@ -5173,8 +5173,7 @@ merge(Compressor.prototype, {
             && !fn.uses_arguments
             && !fn.pinned()) {
             var pos = 0, last = 0;
-            var drop_fargs = exp === fn && compressor.drop_fargs(fn, self)
-                && (!fn.name || !fn.name.definition().recursive_refs);
+            var drop_fargs = exp === fn && !fn.name && compressor.drop_fargs(fn, self);
             var side_effects = [];
             for (var i = 0; i < self.args.length; i++) {
                 var trim = i >= fn.argnames.length;
index 29308ff..a17a8f3 100644 (file)
@@ -1425,3 +1425,33 @@ recursive_iife_3: {
     }
     expect_stdout: "PASS"
 }
+
+issue_3619: {
+    options = {
+        keep_fargs: false,
+        unused: true,
+    }
+    input: {
+        var a = 1, b = "FAIL";
+        (function f(c, d) {
+            function g() {
+                d && (b = "PASS", 0 <= --a && g());
+                0 <= --a && f(0, "function");
+            }
+            g();
+        })();
+        console.log(b);
+    }
+    expect: {
+        var a = 1, b = "FAIL";
+        (function f(c, d) {
+            function g() {
+                d && (b = "PASS", 0 <= --a && g());
+                0 <= --a && f(0, "function");
+            }
+            g();
+        })();
+        console.log(b);
+    }
+    expect_stdout: "PASS"
+}