From 02efac920349cda663047ede9f03203b3b4fb8ad Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 16 Apr 2025 18:04:13 -0400 Subject: [PATCH] fix --- .../svelte/src/internal/client/runtime.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index dd2fb0dee6..727ed8bb06 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -258,19 +258,21 @@ export function check_dirtiness(reaction) { * @param {Effect} effect */ function propagate_error(error, effect) { - var boundary = effect.b; + /** @type {Effect | null} */ + var current = effect; - while (boundary !== null) { - if (!boundary.inert) { + while (current !== null) { + if ((current.f & BOUNDARY_EFFECT) !== 0) { try { - boundary.error(error); + /** @type {Boundary} */ (current.b).error(error); return; } catch { - boundary.inert = true; + // Remove boundary flag from effect + current.f ^= BOUNDARY_EFFECT; } } - boundary = boundary.parent; + current = current.parent; } is_throwing_error = false; @@ -281,7 +283,10 @@ function propagate_error(error, effect) { * @param {Effect} effect */ function should_rethrow_error(effect) { - return (effect.f & DESTROYED) === 0 && (effect.parent === null || !effect.b || effect.b.inert); + return ( + (effect.f & DESTROYED) === 0 && + (effect.parent === null || (effect.parent.f & BOUNDARY_EFFECT) === 0) + ); } export function reset_is_throwing_error() {