From 54b0b49b6810ab77a733da6a88133ad47940c9d9 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 21 Mar 2019 02:58:33 +0800 Subject: [PATCH] enhance `inline` (#3352) --- lib/compress.js | 2 +- test/compress/functions.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index 778d7fa9..fe6e72d1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -5072,7 +5072,7 @@ merge(Compressor.prototype, { } } while (!(scope instanceof AST_Scope)); var safe_to_inject = (!(scope instanceof AST_Toplevel) || compressor.toplevel.vars) - && fn.parent_scope === compressor.find_parent(AST_Scope); + && (exp !== fn || fn.parent_scope === compressor.find_parent(AST_Scope)); var inline = compressor.option("inline"); if (!can_inject_vars(catches, inline >= 3 && safe_to_inject)) return false; if (!can_inject_args(catches, inline >= 2 && safe_to_inject)) return false; diff --git a/test/compress/functions.js b/test/compress/functions.js index a52796c2..cb7a1b86 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -2675,3 +2675,31 @@ cross_references_3: { "9 27", ] } + +loop_inline: { + options = { + inline: true, + reduce_vars: true, + unused: true, + } + input: { + console.log(function(o) { + function g(p) { + return o[p]; + } + function h(q) { + while (g(q)); + } + return h; + }([ 1, "foo", 0 ])(2)); + } + expect: { + console.log(function(o) { + return function(q) { + while (p = q, o[p]); + var p; + }; + }([ 1, "foo", 0 ])(2)); + } + expect_stdout: "undefined" +} -- 2.34.1