diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-07-08 04:42:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-08 04:42:35 +0800 |
commit | 71ee91e716a7fb0f1ef8a4a80a627e10944ef062 (patch) | |
tree | 9f0dec2561c5d2117fd4667574eff711e6be1aba | |
parent | 4f70d2e28c9ffd6404756ed3ebf08a448aef5257 (diff) | |
download | tracifyjs-71ee91e716a7fb0f1ef8a4a80a627e10944ef062.tar.gz tracifyjs-71ee91e716a7fb0f1ef8a4a80a627e10944ef062.zip |
handle duplicate argument names in `collapse_vars` (#2215)
-rw-r--r-- | lib/compress.js | 10 | ||||
-rw-r--r-- | 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" +} |