From: Alex Lam S.L Date: Tue, 7 Mar 2017 19:31:51 +0000 (+0800) Subject: fix return from recursive IIFE (#1570) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=bd6dee52abd607244d89f606a729e811a9b0b478;p=UglifyJS.git 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 --- 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; + } +}