From: kzc Date: Wed, 13 Jul 2016 15:44:28 +0000 (-0400) Subject: Fix mangle with option keep_fnames=true for Safari. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=eb63fece2f48be2be5ee1090d7bb94889a12fd80;p=UglifyJS.git Fix mangle with option keep_fnames=true for Safari. Fixes: #1202 --- diff --git a/lib/scope.js b/lib/scope.js index 7ae87072..606a5a2f 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -314,9 +314,13 @@ AST_Function.DEFMETHOD("next_mangled", function(options, def){ // a function expression's argument cannot shadow the function expression's name var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition(); + + // the function's mangled_name is null when keep_fnames is true + var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null; + while (true) { var name = AST_Lambda.prototype.next_mangled.call(this, options, def); - if (!(tricky_def && tricky_def.mangled_name == name)) + if (!tricky_name || tricky_name != name) return name; } }); diff --git a/test/compress/issue-1202.js b/test/compress/issue-1202.js new file mode 100644 index 00000000..136515fd --- /dev/null +++ b/test/compress/issue-1202.js @@ -0,0 +1,52 @@ +mangle_keep_fnames_false: { + options = { + keep_fnames : true, + keep_fargs : true, + } + mangle = { + keep_fnames : false, + } + input: { + "use strict"; + function total() { + return function n(a, b, c) { + return a + b + c; + }; + } + } + expect: { + "use strict"; + function total() { + return function t(n, r, u) { + return n + r + u; + }; + } + } +} + +mangle_keep_fnames_true: { + options = { + keep_fnames : true, + keep_fargs : true, + } + mangle = { + keep_fnames : true, + } + input: { + "use strict"; + function total() { + return function n(a, b, c) { + return a + b + c; + }; + } + } + expect: { + "use strict"; + function total() { + return function n(t, r, u) { + return t + r + u; + }; + } + } +} +