From 71ee91e716a7fb0f1ef8a4a80a627e10944ef062 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sat, 8 Jul 2017 04:42:35 +0800 Subject: [PATCH] handle duplicate argument names in `collapse_vars` (#2215) --- lib/compress.js | 10 +++++++--- test/compress/collapse_vars.js | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) 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" +} -- 2.34.1