From a36eeedee942cd2e90c96f69897c05cc1d9b6734 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 17 Jun 2024 22:13:46 -0400 Subject: [PATCH] simplify --- .../internal/client/reactivity/deriveds.js | 2 +- .../src/internal/client/reactivity/effects.js | 2 +- .../svelte/src/internal/client/runtime.js | 21 +++++++------------ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js index dbcffe1797..28694cfaf3 100644 --- a/packages/svelte/src/internal/client/reactivity/deriveds.js +++ b/packages/svelte/src/internal/client/reactivity/deriveds.js @@ -120,7 +120,7 @@ export function update_derived(derived, force_schedule) { */ export function destroy_derived(signal) { destroy_derived_children(signal); - remove_reactions(signal, 0); + remove_reactions(signal); set_signal_status(signal, DESTROYED); // TODO we need to ensure we remove the derived from any parent derives diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 999f0cc303..273901b45b 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -336,7 +336,7 @@ export function destroy_effect(effect, remove_dom = true) { } destroy_effect_children(effect, remove_dom); - remove_reactions(effect, 0); + remove_reactions(effect); set_signal_status(effect, DESTROYED); if (effect.transitions) { diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index c1c4bfdc6a..8d95617847 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -426,27 +426,22 @@ function remove_reaction(signal, dependency) { if ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) { dependency.f ^= DISCONNECTED; } - remove_reactions(/** @type {import('#client').Derived} **/ (dependency), 0); + remove_reactions(/** @type {import('#client').Derived} **/ (dependency)); } } /** * @param {import('#client').Reaction} signal - * @param {number} start_index * @returns {void} */ -export function remove_reactions(signal, start_index) { +export function remove_reactions(signal) { const dependencies = signal.deps; - if (dependencies !== null) { - const active_dependencies = start_index === 0 ? null : dependencies.slice(0, start_index); - let i; - for (i = start_index; i < dependencies.length; i++) { - const dependency = dependencies[i]; - // Avoid removing a reaction if we know that it is active (start_index will not be 0) - if (active_dependencies === null || !active_dependencies.includes(dependency)) { - remove_reaction(signal, dependency); - } - } + if (dependencies === null) return; + + for (var i = 0; i < dependencies.length; i++) { + const dependency = dependencies[i]; + // Avoid removing a reaction if we know that it is active (start_index will not be 0) + remove_reaction(signal, dependency); } }