|
|
|
|
@ -315,9 +315,9 @@ export function destroy_derived_effects(derived) {
|
|
|
|
|
/**
|
|
|
|
|
* The currently updating deriveds, used to detect infinite recursion
|
|
|
|
|
* in dev mode and provide a nicer error than 'too much recursion'
|
|
|
|
|
* @type {Derived[]}
|
|
|
|
|
* @type {Derived[] | null}
|
|
|
|
|
*/
|
|
|
|
|
let stack = [];
|
|
|
|
|
export let derived_stack = null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param {Derived} derived
|
|
|
|
|
@ -347,31 +347,32 @@ export function execute_derived(derived) {
|
|
|
|
|
|
|
|
|
|
set_active_effect(get_derived_parent_effect(derived));
|
|
|
|
|
|
|
|
|
|
derived_stack ??= [];
|
|
|
|
|
|
|
|
|
|
if (DEV) {
|
|
|
|
|
// TODO don't we need eager effects in prod too?
|
|
|
|
|
let prev_eager_effects = eager_effects;
|
|
|
|
|
set_eager_effects(new Set());
|
|
|
|
|
try {
|
|
|
|
|
if (includes.call(stack, derived)) {
|
|
|
|
|
e.derived_references_self();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stack.push(derived);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
derived_stack.push(derived);
|
|
|
|
|
derived.f &= ~WAS_MARKED;
|
|
|
|
|
destroy_derived_effects(derived);
|
|
|
|
|
value = update_reaction(derived);
|
|
|
|
|
} finally {
|
|
|
|
|
set_active_effect(prev_active_effect);
|
|
|
|
|
set_eager_effects(prev_eager_effects);
|
|
|
|
|
stack.pop();
|
|
|
|
|
derived_stack.pop();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
try {
|
|
|
|
|
derived_stack.push(derived);
|
|
|
|
|
derived.f &= ~WAS_MARKED;
|
|
|
|
|
destroy_derived_effects(derived);
|
|
|
|
|
value = update_reaction(derived);
|
|
|
|
|
} finally {
|
|
|
|
|
set_active_effect(prev_active_effect);
|
|
|
|
|
derived_stack.pop();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|