fix corner case in `keep_fargs` (#3424)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 21 May 2019 04:55:34 +0000 (12:55 +0800)
committerGitHub <noreply@github.com>
Tue, 21 May 2019 04:55:34 +0000 (12:55 +0800)
fixes #3423

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

index e1f0105..e99ce50 100644 (file)
@@ -108,7 +108,7 @@ function Compressor(options, false_by_default) {
     this.drop_fargs = keep_fargs == "strict" ? function(lambda, parent) {
         if (lambda.length_read) return false;
         var name = lambda.name;
-        if (!name) return parent && parent.TYPE == "Call";
+        if (!name) return parent && parent.TYPE == "Call" && parent.expression === lambda;
         if (name.fixed_value() !== lambda) return false;
         var def = name.definition();
         if (def.direct_access) return false;
index 558b10b..74b801d 100644 (file)
@@ -1117,3 +1117,41 @@ issue_3420_3: {
     }
     expect_stdout: "4"
 }
+
+issue_3423_1: {
+    options = {
+        keep_fargs: "strict",
+        unused: true,
+    }
+    input: {
+        function f(g) {
+            console.log(g.length);
+        }
+        f(function(a) {});
+    }
+    expect: {
+        function f(g) {
+            console.log(g.length);
+        }
+        f(function(a) {});
+    }
+    expect_stdout: "1"
+}
+
+issue_3423_2: {
+    options = {
+        keep_fargs: "strict",
+        unused: true,
+    }
+    input: {
+        new function(a) {
+            console.log(this.constructor.length);
+        }();
+    }
+    expect: {
+        new function(a) {
+            console.log(this.constructor.length);
+        }();
+    }
+    expect_stdout: "1"
+}