diff options
-rw-r--r-- | lib/compress.js | 5 | ||||
-rw-r--r-- | test/compress/reduce_vars.js | 27 |
2 files changed, 31 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index e18fd575..4442bbb5 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -701,8 +701,11 @@ merge(Compressor.prototype, { node.argnames.forEach(function(arg, i) { var d = arg.definition(); if (d.fixed === undefined && (!node.uses_arguments || tw.has_directive("use strict"))) { + var value = iife.args[i]; d.fixed = function() { - return iife.args[i] || make_node(AST_Undefined, iife); + var j = node.argnames.indexOf(arg); + if (j < 0) return value; + return iife.args[j] || make_node(AST_Undefined, iife); }; tw.loop_ids[d.id] = tw.in_loop; mark(tw, d, true); diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index a3421c00..443c347d 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -6774,3 +6774,30 @@ issue_3509: { } expect_stdout: "PASS" } + +issue_3622: { + options = { + evaluate: true, + inline: true, + keep_fargs: "strict", + reduce_vars: true, + sequences: true, + toplevel: true, + unused: true, + } + input: { + var c = "FAIL"; + !function(b, a) { + a && (c = "PASS"); + }(42, this); + console.log(c); + } + expect: { + var c = "FAIL"; + var a; + a = this, + !void (a && (c = "PASS")), + console.log(c); + } + expect_stdout: "PASS" +} |