From fbb8839aba2c4c79212dc7faf30b1646295ac0de Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 19 Feb 2024 03:45:51 -0500 Subject: [PATCH] chore: simplify accessor return (#10520) Return `pop` directly by returning the component from it; gets rid of extraneous variable declaration --------- Co-authored-by: Rich Harris Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --- .../3-transform/client/transform-client.js | 17 ++++++----------- packages/svelte/src/internal/client/runtime.js | 14 +++++++++----- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 90abcd3199..80628cc2f2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -288,17 +288,12 @@ export function client_component(source, analysis, options) { ) : () => {}; - if (properties.length > 0) { - component_block.body.push( - b.var('$$accessors', b.object(properties)), - b.stmt(b.call('$.pop', b.id('$$accessors'))) - ); - append_styles(); - component_block.body.push(b.return(b.id('$$accessors'))); - } else { - component_block.body.push(b.stmt(b.call('$.pop'))); - append_styles(); - } + append_styles(); + component_block.body.push( + properties.length > 0 + ? b.return(b.call('$.pop', b.object(properties))) + : b.stmt(b.call('$.pop')) + ); if (analysis.uses_rest_props) { /** @type {string[]} */ diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index dbf0036e89..e099bc7993 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1906,14 +1906,15 @@ export function push(props, runes = false) { } /** - * @param {Record} [accessors] - * @returns {void} + * @template {Record} T + * @param {T} [component] + * @returns {T} */ -export function pop(accessors) { +export function pop(component) { const context_stack_item = current_component_context; if (context_stack_item !== null) { - if (accessors !== undefined) { - context_stack_item.a = accessors; + if (component !== undefined) { + context_stack_item.a = component; } const effects = context_stack_item.e; if (effects !== null) { @@ -1925,6 +1926,9 @@ export function pop(accessors) { current_component_context = context_stack_item.p; context_stack_item.m = true; } + // Micro-optimization: Don't set .a above to the empty object + // so it can be garbage-collected when the return here is unused + return component || /** @type {T} */ ({}); } /**