From 2c664aaa66ea18e2a83173b52b19cf8d8c51146d Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 26 Mar 2024 13:19:50 +0000 Subject: [PATCH] chore: refactor local effect flushing to use new topological approach --- .../svelte/src/internal/client/runtime.js | 69 ++++++++++--------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 01f1b700df..707f4d9619 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -552,45 +552,46 @@ export function schedule_effect(signal) { */ function collect_effects(effect, filter_flags, collected) { var effects = effect.effects; - if (effects !== null) { - var i, s, child, flags; - var render = []; - var user = []; - - for (i = 0; i < effects.length; i++) { - child = effects[i]; - flags = child.f; - if ((flags & CLEAN) !== 0) { - continue; - } + if (effects === null) { + return; + } + var i, s, child, flags; + var render = []; + var user = []; + + for (i = 0; i < effects.length; i++) { + child = effects[i]; + flags = child.f; + if ((flags & CLEAN) !== 0) { + continue; + } - if ((flags & PRE_EFFECT) !== 0) { - if ((filter_flags & PRE_EFFECT) !== 0) { - collected.push(child); - } - collect_effects(child, filter_flags, collected); - } else if ((flags & RENDER_EFFECT) !== 0) { - render.push(child); - } else if ((flags & EFFECT) !== 0) { - user.push(child); + if ((flags & PRE_EFFECT) !== 0) { + if ((filter_flags & PRE_EFFECT) !== 0) { + collected.push(child); } + collect_effects(child, filter_flags, collected); + } else if ((flags & RENDER_EFFECT) !== 0) { + render.push(child); + } else if ((flags & EFFECT) !== 0) { + user.push(child); } + } - if (render.length > 0) { - if ((filter_flags & RENDER_EFFECT) !== 0) { - collected.push(...render); - } - for (s = 0; s < render.length; s++) { - collect_effects(render[s], filter_flags, collected); - } + if (render.length > 0) { + if ((filter_flags & RENDER_EFFECT) !== 0) { + collected.push(...render); } - if (user.length > 0) { - if ((filter_flags & EFFECT) !== 0) { - collected.push(...user); - } - for (s = 0; s < user.length; s++) { - collect_effects(user[s], filter_flags, collected); - } + for (s = 0; s < render.length; s++) { + collect_effects(render[s], filter_flags, collected); + } + } + if (user.length > 0) { + if ((filter_flags & EFFECT) !== 0) { + collected.push(...user); + } + for (s = 0; s < user.length; s++) { + collect_effects(user[s], filter_flags, collected); } } }