diff --git a/lib/compress.js b/lib/compress.js index a7184109..7d1e6fd6 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -11562,16 +11562,14 @@ merge(Compressor.prototype, { node = parent; parent = compressor.parent(level++); if (parent instanceof AST_Assign) { - var found = false; + if (parent.left instanceof AST_SymbolRef && parent.left.definition() === def) { + if (in_try(level, parent)) break; + return strip_assignment(def); + } if (parent.left.match_symbol(function(node) { if (node instanceof AST_PropAccess) return true; - if (!found && node instanceof AST_SymbolRef && node.definition() === def) { - if (in_try(level, parent)) return true; - found = true; - } })) break; - if (!found) continue; - return strip_assignment(def); + continue; } if (parent instanceof AST_Exit) { if (!local) break; diff --git a/test/compress/destructured.js b/test/compress/destructured.js index 6716f9e7..87d7e1be 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -2127,7 +2127,7 @@ issue_4372_2: { } expect: { var a; - [ a ] = [ "PASS", "FAIL" ]; + [ a ] = a = [ "PASS", "FAIL" ]; console.log(a); } expect_stdout: "PASS" @@ -3125,3 +3125,103 @@ issue_5114_3: { expect_stdout: "PASS" node_version: ">=6" } + +issue_5153_array_assign: { + options = { + dead_code: true, + } + input: { + var a = function*() { + yield b; + }(), b; + [ b ] = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect: { + var a = function*() { + yield b; + }(), b; + [ b ] = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" + node_version: ">=6" +} + +issue_5153_array_var: { + options = { + dead_code: true, + } + input: { + var a = function*() { + yield b; + }(), [ b ] = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect: { + var a = function*() { + yield b; + }(), [ b ] = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" + node_version: ">=6" +} + +issue_5153_object_assign: { + options = { + dead_code: true, + } + input: { + var a = { + get p() { + return b; + }, + }, b; + ({ + p: b + } = b = a); + console.log(a === b ? "PASS" : "FAIL"); + } + expect: { + var a = { + get p() { + return b; + }, + }, b; + ({ + p: b + } = b = a); + console.log(a === b ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" + node_version: ">=6" +} + +issue_5153_object_var: { + options = { + dead_code: true, + } + input: { + var a = { + get p() { + return b; + }, + }, { + p: b + } = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect: { + var a = { + get p() { + return b; + }, + }, { + p: b + } = b = a; + console.log(a === b ? "PASS" : "FAIL"); + } + expect_stdout: "PASS" + node_version: ">=6" +}