From dc9e1ff0b1965560679ab3cbe7dde831bf724dd4 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 23 Nov 2021 12:10:05 +0000 Subject: [PATCH] fix corner case in `unused` (#5190) fixes #5189 --- lib/compress.js | 6 +++++ test/compress/destructured.js | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index f431b16d..3df34c42 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7211,6 +7211,9 @@ merge(Compressor.prototype, { if (!drop) break; var sym = elements[0]; if (sym.has_side_effects(compressor)) break; + if (value.has_side_effects(compressor) && sym.match_symbol(function(node) { + return node instanceof AST_PropAccess; + })) break; value = make_node(AST_Sub, node, { expression: value, property: make_node(AST_Number, node, { value: 0 }), @@ -7337,6 +7340,9 @@ merge(Compressor.prototype, { var prop = properties[0]; if (prop.key instanceof AST_Node) break; if (prop.value.has_side_effects(compressor)) break; + if (value.has_side_effects(compressor) && prop.value.match_symbol(function(node) { + return node instanceof AST_PropAccess; + })) break; value = make_node(AST_Sub, node, { expression: value, property: make_node_from_constant(prop.key, prop), diff --git a/test/compress/destructured.js b/test/compress/destructured.js index 325eef18..04067484 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -3322,3 +3322,47 @@ issue_5168: { expect_stdout: "function" node_version: ">=6" } + +issue_5189_1: { + options = { + pure_getters: "strict", + reduce_vars: true, + side_effects: true, + toplevel: true, + unused: true, + } + input: { + var a = 42; + [ a.p ] = a = "PASS"; + console.log(a); + } + expect: { + var a; + [ a.p ] = a = "PASS"; + console.log(a); + } + expect_stdout: "PASS" + node_version: ">=6" +} + +issue_5189_2: { + options = { + pure_getters: "strict", + reduce_vars: true, + side_effects: true, + toplevel: true, + unused: true, + } + input: { + var a = 42; + ({ p: a.q } = a = "PASS"); + console.log(a); + } + expect: { + var a; + ({ p: a.q } = a = "PASS"); + console.log(a); + } + expect_stdout: "PASS" + node_version: ">=6" +} -- 2.34.1