From 91e1e8e647ae2e70fb7a3319af7a5eda4c52d925 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Thu, 12 Jun 2025 17:19:57 +0100 Subject: [PATCH 1/2] [acorn-opt] Use walkPattern for variable declarators too --- tools/acorn-optimizer.mjs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tools/acorn-optimizer.mjs b/tools/acorn-optimizer.mjs index 5d8c3fe61bd96..22271d61befb9 100755 --- a/tools/acorn-optimizer.mjs +++ b/tools/acorn-optimizer.mjs @@ -243,17 +243,16 @@ function JSDCE(ast, aggressive) { let removedHere = 0; node.declarations = node.declarations.filter((node) => { assert(node.type === 'VariableDeclarator'); - const id = node.id; - if (id.type === 'ObjectPattern' || id.type === 'ArrayPattern') { - // TODO: DCE into object patterns, that is, things like - // let { a, b } = .. - // let [ a, b ] = .. - return true; - } - assert(id.type === 'Identifier'); - const curr = id.name; - const value = node.init; - const keep = !names.has(curr) || (value && hasSideEffects(value)); + let keep = node.init && hasSideEffects(node.init); + walkPattern( + node.id, + (value) => { + keep ||= hasSideEffects(value); + }, + (boundName) => { + keep ||= !names.has(boundName); + }, + ); if (!keep) removedHere = 1; return keep; }); From 4ca0dafc45de3604b05059bf02386233516b2169 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Thu, 12 Jun 2025 19:37:29 +0100 Subject: [PATCH 2/2] Update JSDCE-objectPattern-output.js --- test/js_optimizer/JSDCE-objectPattern-output.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/js_optimizer/JSDCE-objectPattern-output.js b/test/js_optimizer/JSDCE-objectPattern-output.js index 18601ccdea310..c4c7893aeb8b4 100644 --- a/test/js_optimizer/JSDCE-objectPattern-output.js +++ b/test/js_optimizer/JSDCE-objectPattern-output.js @@ -5,7 +5,6 @@ let z = 50; globalThis.f = function([, r]) { let {a, b} = r; let {z: c} = r; - let [, i, {foo: p, bar: q}] = r; return g(a, b, c, d, z); };