From: Alex Lam S.L Date: Fri, 7 Jul 2017 20:42:35 +0000 (+0800) Subject: handle duplicate argument names in `collapse_vars` (#2215) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=71ee91e716a7fb0f1ef8a4a80a627e10944ef062;p=UglifyJS.git handle duplicate argument names in `collapse_vars` (#2215) --- diff --git a/lib/compress.js b/lib/compress.js index e6349242..74fb62ec 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -820,7 +820,11 @@ merge(Compressor.prototype, { && !fn.uses_eval && (iife = compressor.parent()) instanceof AST_Call && iife.expression === fn) { - fn.argnames.forEach(function(sym, i) { + var names = Object.create(null); + for (var i = fn.argnames.length; --i >= 0;) { + var sym = fn.argnames[i]; + if (sym.name in names) continue; + names[sym.name] = true; var arg = iife.args[i]; if (!arg) arg = make_node(AST_Undefined, sym); else { @@ -840,11 +844,11 @@ merge(Compressor.prototype, { }); arg.walk(tw); } - if (arg) candidates.push(make_node(AST_VarDef, sym, { + if (arg) candidates.unshift(make_node(AST_VarDef, sym, { name: sym, value: arg })); - }); + } } } diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 7f3c470b..10c403fa 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -2320,3 +2320,25 @@ issue_2203_2: { } expect_stdout: "PASS" } + +duplicate_argname: { + options = { + collapse_vars: true, + unused: true, + } + input: { + function f() { return "PASS"; } + console.log(function(a, a) { + f++; + return a; + }("FAIL", f())); + } + expect: { + function f() { return "PASS"; } + console.log(function(a, a) { + f++; + return a; + }("FAIL", f())); + } + expect_stdout: "PASS" +}