From bd6dee52abd607244d89f606a729e811a9b0b478 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Wed, 8 Mar 2017 03:31:51 +0800 Subject: [PATCH] fix return from recursive IIFE (#1570) `side-effects` did not account for IIFEs being able to reference itself thus making its return value potentially significant --- lib/compress.js | 3 ++- test/compress/issue-1569.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/compress/issue-1569.js diff --git a/lib/compress.js b/lib/compress.js index 8bbbc3f6..85b457e3 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2100,7 +2100,8 @@ merge(Compressor.prototype, { def(AST_This, return_null); def(AST_Call, function(compressor, first_in_statement){ if (!this.has_pure_annotation(compressor) && compressor.pure_funcs(this)) { - if (this.expression instanceof AST_Function) { + if (this.expression instanceof AST_Function + && (!this.expression.name || !this.expression.name.definition().references.length)) { var node = this.clone(); node.expression = node.expression.process_expression(false); return node; diff --git a/test/compress/issue-1569.js b/test/compress/issue-1569.js new file mode 100644 index 00000000..5f0bca34 --- /dev/null +++ b/test/compress/issue-1569.js @@ -0,0 +1,19 @@ +inner_reference: { + options = { + side_effects: true, + } + input: { + !function f(a) { + return a && f(a - 1) + a; + }(42); + !function g(a) { + return a; + }(42); + } + expect: { + !function f(a) { + return a && f(a - 1) + a; + }(42); + !void 0; + } +} -- 2.34.1