From d1c6bb8c7c4cc491c4bb52e14ac2127a2496fbb8 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 23 Mar 2018 02:31:59 +0800 Subject: [PATCH] fix nested `inline` within loop (#3019) fixes #3018 --- lib/compress.js | 5 +++-- test/compress/functions.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index fba88f42b2..aeff904e7a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4773,9 +4773,10 @@ merge(Compressor.prototype, { var var_def = stat.definitions[j]; var name = var_def.name; append_var(decls, expressions, name, var_def.value); - if (in_loop) { + if (in_loop && all(fn.argnames, function(argname) { + return argname.name != name.name; + })) { var def = fn.variables.get(name.name); - if (def.orig[0] instanceof AST_SymbolFunarg) continue; var sym = make_node(AST_SymbolRef, name, name); def.references.push(sym); expressions.splice(pos++, 0, make_node(AST_Assign, var_def, { diff --git a/test/compress/functions.js b/test/compress/functions.js index bbe94ebfde..ceaf0643e4 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -2208,3 +2208,32 @@ issue_3016_3_ie8: { "PASS", ] } + +issue_3018: { + options = { + inline: true, + side_effects: true, + toplevel: true, + } + input: { + var b = 1, c = "PASS"; + do { + (function() { + (function(a) { + a = 0 != (a && (c = "FAIL")); + })(); + })(); + } while (b--); + console.log(c); + } + expect: { + var b = 1, c = "PASS"; + do { + a = void 0, + a = 0 != (a && (c = "FAIL")); + } while (b--); + var a; + console.log(c); + } + expect_stdout: "PASS" +}