From: Alex Lam S.L Date: Sun, 7 Jan 2018 07:31:24 +0000 (+0800) Subject: fix recursive function `inline` (#2738) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=1ee8be8d91dd94a983e853b7abcc64d6dbc6214b;p=UglifyJS.git fix recursive function `inline` (#2738) fixes #2737 --- diff --git a/lib/compress.js b/lib/compress.js index 28d6a1c4..011bb1b4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4075,9 +4075,10 @@ merge(Compressor.prototype, { if (compressor.option("inline") && !fn.uses_arguments && !fn.uses_eval + && !(fn.name && fn instanceof AST_Function) && (value = can_flatten_body(stat)) - && (exp === fn ? !fn.name - : compressor.option("unused") + && (exp === fn + || compressor.option("unused") && (def = exp.definition()).references.length == 1 && !recursive_ref(compressor, def) && fn.is_constant_expression(exp.scope)) diff --git a/test/compress/functions.js b/test/compress/functions.js index f4662082..222aa0ca 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -1905,3 +1905,49 @@ duplicate_arg_var: { } expect_stdout: "PASS" } + +issue_2737_1: { + options = { + inline: true, + reduce_vars: true, + unused: true, + } + input: { + (function(a) { + while (a()); + })(function f() { + console.log(typeof f); + }); + } + expect: { + (function(a) { + while (a()); + })(function f() { + console.log(typeof f); + }); + } + expect_stdout: "function" +} + +issue_2737_2: { + options = { + inline: true, + reduce_vars: true, + unused: true, + } + input: { + (function(bar) { + for (;bar(); ) break; + })(function qux() { + return console.log("PASS"), qux; + }); + } + expect: { + (function(bar) { + for (;bar(); ) break; + })(function qux() { + return console.log("PASS"), qux; + }); + } + expect_stdout: "PASS" +}