improve usability of `pure_funcs` (#3336)
authorAlex Lam S.L <alexlamsl@gmail.com>
Thu, 14 Mar 2019 13:36:45 +0000 (21:36 +0800)
committerGitHub <noreply@github.com>
Thu, 14 Mar 2019 13:36:45 +0000 (21:36 +0800)
fixes #3325

lib/compress.js
test/compress/pure_funcs.js

index 04adb8b..2a4f0df 100644 (file)
@@ -106,10 +106,16 @@ function Compressor(options, false_by_default) {
     var pure_funcs = this.options["pure_funcs"];
     if (typeof pure_funcs == "function") {
         this.pure_funcs = pure_funcs;
-    } else {
-        this.pure_funcs = pure_funcs ? function(node) {
+    } else if (typeof pure_funcs == "string") {
+        this.pure_funcs = function(node) {
+            return pure_funcs !== node.expression.print_to_string();
+        };
+    } else if (Array.isArray(pure_funcs)) {
+        this.pure_funcs = function(node) {
             return pure_funcs.indexOf(node.expression.print_to_string()) < 0;
-        } : return_true;
+        };
+    } else {
+        this.pure_funcs = return_true;
     }
     var top_retain = this.options["top_retain"];
     if (top_retain instanceof RegExp) {
index 56c36dd..48140dd 100644 (file)
@@ -642,3 +642,41 @@ issue_3065_4: {
         })();
     }
 }
+
+issue_3325_1: {
+    options = {
+        pure_funcs: "cb",
+        side_effects: true,
+    }
+    input: {
+        function cb() {
+            console.log("PASS");
+        }
+        cb();
+    }
+    expect: {
+        function cb() {
+            console.log("PASS");
+        }
+    }
+}
+
+issue_3325_2: {
+    options = {
+        pure_funcs: "xxxcbxxx",
+        side_effects: true,
+    }
+    input: {
+        function cb() {
+            console.log("PASS");
+        }
+        cb();
+    }
+    expect: {
+        function cb() {
+            console.log("PASS");
+        }
+        cb();
+    }
+    expect_stdout: "PASS"
+}