diff --git a/lib/compress.js b/lib/compress.js index daebc1f8..89f99368 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -10446,9 +10446,8 @@ Compressor.prototype.compress = function(node) { append_var(decl_var, expr_var, name, value); if (!in_loop) continue; if (arg_used.has(name.name)) continue; - var def = fn.variables.get(name.name); - if (fn.functions.has(name.name) && def.orig.length == 1) continue; - var def = fn.variables.get(name.name); + var def = name.definition(); + if (def.orig.length == 1 && fn.functions.has(name.name)) continue; var sym = make_node(AST_SymbolRef, name, name); def.references.push(sym); expr_loop.push(make_node(AST_Assign, var_def, { @@ -13094,8 +13093,8 @@ Compressor.prototype.compress = function(node) { scope.variables.set(name, def); def.single_use = false; if (!in_loop) return; - if (fn.functions.has(name) && def.orig.length == 1) return; if (def.references.length == def.replaced) return; + if (def.orig.length == 1 && fn.functions.has(name)) return; if (!all(def.orig, function(sym) { if (sym instanceof AST_SymbolConst) return false; if (sym instanceof AST_SymbolFunarg) return def.scope.resolve() !== fn; diff --git a/test/compress/destructured.js b/test/compress/destructured.js index f246500a..825ac5a5 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -3367,3 +3367,28 @@ issue_5189_2: { expect_stdout: "PASS" node_version: ">=6" } + +issue_5288: { + options = { + conditionals: true, + inline: true, + reduce_vars: true, + toplevel: true, + unused: true, + varify: true, + } + input: { + while (function([]) {}([ function f() { + if (console) + return console.log("PASS"); + else { + let a = 0; + } + }() ])); + } + expect: { + while ([ [ console ? console.log("PASS") : 0 ] ], void 0); + } + expect_stdout: "PASS" + node_version: ">=6" +}