From 8926a2f327f9954e856161169a92a4190f0318e4 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 20 Jul 2021 18:10:58 +0100 Subject: [PATCH] fix corner case in `unused` (#5090) fixes #5089 --- lib/compress.js | 2 +- test/compress/loops.js | 4 +-- test/compress/rests.js | 55 +++++++++++++++++++++++++++++++++++++- test/compress/transform.js | 2 +- 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index c5d75d42..6d1f93d4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7276,6 +7276,7 @@ merge(Compressor.prototype, { } function retain_lhs(node) { + if (node instanceof AST_DefaultValue) return retain_lhs(node.name); if (node instanceof AST_Destructured) { if (value === null) { value = make_node(AST_Number, node, { value: 0 }); @@ -7289,7 +7290,6 @@ merge(Compressor.prototype, { } return make_node(AST_DestructuredObject, node, { properties: [] }); } - if (node instanceof AST_DefaultValue) node = node.name; node.__unused = null; return node; } diff --git a/test/compress/loops.js b/test/compress/loops.js index 034537a6..d5f9269a 100644 --- a/test/compress/loops.js +++ b/test/compress/loops.js @@ -193,9 +193,9 @@ evaluate: { } while (false); } expect: { - for(;;) + for (;;) a(); - for(;;) + for (;;) c(); d(); } diff --git a/test/compress/rests.js b/test/compress/rests.js index 18064603..f6878aa8 100644 --- a/test/compress/rests.js +++ b/test/compress/rests.js @@ -943,10 +943,63 @@ issue_4666: { expect: { var a = 0, b = 0; var o = (c => +a + c)([ b ]); - for(var k in o) + for (var k in o) b++; console.log(1, b); } expect_stdout: "1 2" node_version: ">=6" } + +issue_5089_1: { + options = { + unused: true, + } + input: { + var { + p: [] = 42, + ...o + } = { + p: [], + }; + console.log(o.p); + } + expect: { + var { + p: {}, + ...o + } = { + p: 0, + }; + console.log(o.p); + } + expect_stdout: "undefined" + node_version: ">=8" +} + +issue_5089_2: { + options = { + pure_getters: "strict", + unused: true, + } + input: { + var { + p: {} = null, + ...o + } = { + p: {}, + }; + console.log(o.p); + } + expect: { + var { + p: {}, + ...o + } = { + p: 0, + }; + console.log(o.p); + } + expect_stdout: "undefined" + node_version: ">=8" +} diff --git a/test/compress/transform.js b/test/compress/transform.js index d8e1ee79..1bee8da9 100644 --- a/test/compress/transform.js +++ b/test/compress/transform.js @@ -95,7 +95,7 @@ while_if_break: { } } expect: { - for(; a && (b && c && d, !e);); + for (; a && (b && c && d, !e);); } }