diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2019-03-21 02:58:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-21 02:58:33 +0800 |
commit | 54b0b49b6810ab77a733da6a88133ad47940c9d9 (patch) | |
tree | 7378c6cd38d8258e7ac6170bd8e8b4e94ab665c7 | |
parent | 65648d84a5f1df20e6a839cde9fc9dcabc7e13ea (diff) | |
download | tracifyjs-54b0b49b6810ab77a733da6a88133ad47940c9d9.tar.gz tracifyjs-54b0b49b6810ab77a733da6a88133ad47940c9d9.zip |
enhance `inline` (#3352)
-rw-r--r-- | lib/compress.js | 2 | ||||
-rw-r--r-- | test/compress/functions.js | 28 |
2 files changed, 29 insertions, 1 deletions
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" +} |