From fb0f8fb8999c4fd9f8f07f45fb44e3d0099506e1 Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Mon, 18 Dec 2017 05:14:11 +0800 Subject: [PATCH] compress `function.call()` --- lib/compress.js | 11 +++++++++++ test/compress/functions.js | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index 52c30964..2830c595 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3846,6 +3846,17 @@ merge(Compressor.prototype, { } } break; + case "call": + if (exp.expression instanceof AST_Function && !exp.expression.contains_this()) { + return make_sequence(this, [ + self.args[0], + make_node(AST_Call, self, { + expression: exp.expression, + args: self.args.slice(1) + }) + ]).optimize(compressor); + } + break; } } if (compressor.option("unsafe_Func") diff --git a/test/compress/functions.js b/test/compress/functions.js index 5f7fba6b..35ea3d4e 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -923,3 +923,29 @@ issue_2604_2: { } expect_stdout: "PASS" } + +unsafe_call: { + options = { + inline: true, + passes: 2, + reduce_vars: true, + side_effects: true, + unsafe: true, + unused: true, + } + input: { + (function(a, b) { + console.log(a, b); + }).call("foo", "bar"); + (function(a, b) { + console.log(this, a, b); + }).call("foo", "bar"); + } + expect: { + console.log("bar", void 0); + (function(a, b) { + console.log(this, a, b); + }).call("foo", "bar"); + } + expect_stdout: true +}