trim unused invocation parameters (#1526)
authorAlex Lam S.L <alexlamsl@gmail.com>
Thu, 2 Mar 2017 03:33:59 +0000 (11:33 +0800)
committerGitHub <noreply@github.com>
Thu, 2 Mar 2017 03:33:59 +0000 (11:33 +0800)
lib/compress.js
test/compress/evaluate.js

index 1d4e719..ddf2b10 100644 (file)
@@ -2481,6 +2481,20 @@ merge(Compressor.prototype, {
     });
 
     OPT(AST_Call, function(self, compressor){
+        if (compressor.option("unused")
+            && self.expression instanceof AST_Function
+            && !self.expression.uses_arguments
+            && !self.expression.uses_eval
+            && self.args.length > self.expression.argnames.length) {
+            var end = self.expression.argnames.length;
+            for (var i = end, len = self.args.length; i < len; i++) {
+                var node = self.args[i].drop_side_effect_free(compressor);
+                if (node) {
+                    self.args[end++] = node;
+                }
+            }
+            self.args.length = end;
+        }
         if (compressor.option("unsafe")) {
             var exp = self.expression;
             if (exp instanceof AST_SymbolRef && exp.undeclared()) {
index f84436d..26b6e48 100644 (file)
@@ -646,6 +646,29 @@ call_args: {
     }
 }
 
+call_args_drop_param: {
+    options = {
+        evaluate: true,
+        keep_fargs: false,
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        const a = 1;
+        console.log(a);
+        +function(a) {
+            return a;
+        }(a, b);
+    }
+    expect: {
+        const a = 1;
+        console.log(1);
+        +function() {
+            return 1;
+        }(b);
+    }
+}
+
 in_boolean_context: {
     options = {
         booleans: true,