diff --git a/lib/compress.js b/lib/compress.js index 4c9026d179..6c47562919 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2563,8 +2563,13 @@ merge(Compressor.prototype, { if (is_lhs_read_only(value, compressor)) return; var referenced = def.references.length - def.replaced; if (referenced < 2) return; - candidate = candidate.clone(); - candidate[candidate instanceof AST_Assign ? "right" : "value"] = value; + var expr = candidate.clone(); + expr[expr instanceof AST_Assign ? "right" : "value"] = value; + if (candidate.name_index >= 0) { + expr.name_index = candidate.name_index; + expr.arg_index = candidate.arg_index; + } + candidate = expr; } return value_def = def; } diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 4051bb1489..36cba2a55b 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -9010,3 +9010,23 @@ issue_4865: { } expect_stdout: true } + +issue_4868: { + options = { + collapse_vars: true, + unused: true, + } + input: { + var a; + (function(b) { + console.log(b[0]); + })(a = [ "PASS" ], a = [ "FAIL" ]); + } + expect: { + var a; + (function(b) { + console.log(b[0]); + })(a = [ "PASS" ], a = [ "FAIL" ]); + } + expect_stdout: "PASS" +}