From 5205dbcbf4f522f8b4dc9f9f9727b621982c9f28 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Wed, 27 Dec 2017 07:00:12 +0800 Subject: [PATCH] retain recursive function names (#2667) fixes #2665 --- lib/compress.js | 11 ++++++++--- test/compress/drop-unused.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 4a2a436b..c8cddc37 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4700,9 +4700,14 @@ merge(Compressor.prototype, { if (d.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) { value = fixed.clone(true); var defun_def = value.name.definition(); - value.name = make_node(AST_SymbolLambda, value.name, value.name); - value.name.scope = value; - var lambda_def = value.def_function(value.name); + var lambda_def = value.variables.get(value.name.name); + var name = lambda_def && lambda_def.orig[0]; + if (!(name instanceof AST_SymbolLambda)) { + name = make_node(AST_SymbolLambda, value.name, value.name); + name.scope = value; + value.name = name; + lambda_def = value.def_function(name); + } value.walk(new TreeWalker(function(node) { if (node instanceof AST_SymbolRef && node.definition() === defun_def) { node.thedef = lambda_def; diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index 714e1d16..21d4b7ce 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -1488,3 +1488,37 @@ issue_2660_2: { } expect_stdout: "0" } + +issue_2665: { + options = { + evaluate: true, + inline: true, + keep_fargs: false, + passes: 2, + reduce_funcs: true, + reduce_vars: true, + side_effects: true, + toplevel: true, + typeofs: true, + unused: true, + } + input: { + var a = 1; + function g() { + a-- && g(); + } + typeof h == "function" && h(); + function h() { + typeof g == "function" && g(); + } + console.log(a); + } + expect: { + var a = 1; + !function g() { + a-- && g(); + }(); + console.log(a); + } + expect_stdout: "-1" +} -- 2.34.1