From d21cb84696f47f5cba25c88527d5575b7954191a Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 7 Dec 2017 01:22:08 +0800 Subject: [PATCH] eliminate noop calls more aggressively (#2559) --- lib/compress.js | 25 +++++++++++++------------ test/compress/functions.js | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 3f0414e2..4195ab24 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3460,11 +3460,11 @@ merge(Compressor.prototype, { OPT(AST_Call, function(self, compressor){ var exp = self.expression; var fn = exp; + if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef) { + fn = fn.fixed_value(); + } if (compressor.option("unused") - && (fn instanceof AST_Function - || compressor.option("reduce_vars") - && fn instanceof AST_SymbolRef - && (fn = fn.fixed_value()) instanceof AST_Function) + && fn instanceof AST_Function && !fn.uses_arguments && !fn.uses_eval) { var pos = 0, last = 0; @@ -3683,14 +3683,15 @@ merge(Compressor.prototype, { return make_sequence(self, args).optimize(compressor); } } - if (exp instanceof AST_Function) { + if (fn instanceof AST_Function) { if (compressor.option("inline") - && !exp.name - && !exp.uses_arguments - && !exp.uses_eval - && exp.body.length == 1 - && !exp.contains_this() - && all(exp.argnames, function(arg) { + && exp === fn + && !fn.name + && !fn.uses_arguments + && !fn.uses_eval + && fn.body.length == 1 + && !fn.contains_this() + && all(fn.argnames, function(arg) { return arg.__unused; }) && !self.has_pure_annotation(compressor)) { @@ -3708,7 +3709,7 @@ merge(Compressor.prototype, { return make_sequence(self, args).optimize(compressor); } } - if (compressor.option("side_effects") && all(exp.body, is_empty)) { + if (compressor.option("side_effects") && all(fn.body, is_empty)) { var args = self.args.concat(make_node(AST_Undefined, self)); return make_sequence(self, args).optimize(compressor); } diff --git a/test/compress/functions.js b/test/compress/functions.js index 7a336bb8..15727fc2 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -652,3 +652,23 @@ issue_2531_3: { } expect_stdout: "Greeting: Hello" } + +empty_body: { + options = { + reduce_vars: true, + side_effects: true, + } + input: { + function f() { + function noop() {} + noop(); + return noop; + } + } + expect: { + function f() { + function noop() {} + return noop; + } + } +} -- 2.34.1