From 9b82f9be9129c98bc02614d15abf957b35778745 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 26 Jul 2021 09:44:34 +0100 Subject: [PATCH] fix corner case in `unused` (#5101) fixes #5100 --- lib/compress.js | 11 ++++--- test/compress/rests.js | 66 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index dc171ae7..2c785251 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7301,12 +7301,11 @@ merge(Compressor.prototype, { if (value === null) { value = make_node(AST_Number, node, { value: 0 }); } else if (value) { - if (value.may_throw_on_access(compressor, true)) value = make_sequence(node, [ - value, - make_node(AST_Number, node, { value: 0 }), - ]); - } else if (node instanceof AST_DestructuredArray) { - return make_node(AST_DestructuredArray, node, { elements: [] }); + if (value.tail_node().write_only === true || value.may_throw_on_access(compressor, true)) { + value = make_node(AST_Array, node, { + elements: value instanceof AST_Sequence ? value.expressions : [ value ], + }); + } } return make_node(AST_DestructuredObject, node, { properties: [] }); } diff --git a/test/compress/rests.js b/test/compress/rests.js index f6878aa8..45d8e222 100644 --- a/test/compress/rests.js +++ b/test/compress/rests.js @@ -1003,3 +1003,69 @@ issue_5089_2: { expect_stdout: "undefined" node_version: ">=8" } + +issue_5100_1: { + options = { + passes: 2, + pure_getters: "strict", + side_effects: true, + unused: true, + } + input: { + var a; + [ { + p: {}, + ...a + } ] = [ { + p: { + q: a, + } = 42, + r: "PASS", + } ]; + console.log(a.r); + } + expect: { + var a; + [ { + p: {}, + ...a + } ] = [ { + p: [ a = 42["q"] ], + r: "PASS", + } ]; + console.log(a.r); + } + expect_stdout: "PASS" + node_version: ">=8" +} + +issue_5100_2: { + options = { + passes: 2, + pure_getters: "strict", + side_effects: true, + unused: true, + } + input: { + var a; + [ { + p: {}, + ...a + } ] = [ { + p: (console.log("PASS"), { + q: a, + } = 42), + } ]; + } + expect: { + var a; + [ { + p: {}, + ...a + } ] = [ { + p: [ console.log("PASS"), a = 42["q"] ], + } ]; + } + expect_stdout: "PASS" + node_version: ">=10" +}