pull/10760/head
Rich Harris 2 years ago
parent 05f98b2fb0
commit 462fe4bbf4

@ -66,6 +66,7 @@ export function derived_safe_equal(fn) {
export function destroy_derived(signal) {
destroy_children(signal);
remove_reactions(signal, 0);
set_signal_status(signal, DESTROYED);
signal.effects =
signal.deps =
@ -73,6 +74,4 @@ export function destroy_derived(signal) {
// @ts-expect-error `signal.fn` cannot be `null` while the signal is alive
signal.fn =
null;
set_signal_status(signal, DESTROYED);
}

@ -15,8 +15,6 @@ import {
} from '../runtime.js';
import { DIRTY, MANAGED, RENDER_EFFECT, EFFECT, PRE_EFFECT, DESTROYED } from '../constants.js';
import { set } from './sources.js';
import { is_array } from '../utils.js';
import { run_all } from '../../common.js';
/**
* @param {import('./types.js').EffectType} type
@ -243,20 +241,11 @@ export function render_effect(fn, block = current_block, managed = false, sync =
* @returns {void}
*/
export function destroy_effect(signal) {
const teardown = signal.teardown;
const destroy = signal.ondestroy;
destroy_children(signal);
remove_reactions(signal, 0);
signal.fn = signal.effects = signal.ondestroy = signal.ctx = signal.block = signal.deps = null;
set_signal_status(signal, DESTROYED);
if (destroy !== null) {
if (is_array(destroy)) {
run_all(destroy);
} else {
destroy();
}
}
if (teardown !== null) {
teardown();
}
signal.teardown?.();
signal.ondestroy?.();
signal.fn = signal.effects = signal.ondestroy = signal.ctx = signal.block = signal.deps = null;
}

@ -821,18 +821,11 @@ export function invalidate_inner_signals(fn) {
* @returns {void}
*/
function mark_subtree_children_inert(signal, inert, visited_blocks) {
const references = signal.effects;
if (references !== null) {
let i;
for (i = 0; i < references.length; i++) {
const reference = references[i];
if ((reference.f & IS_EFFECT) !== 0) {
mark_subtree_inert(
/** @type {import('#client').Effect} */ (reference),
inert,
visited_blocks
);
}
const effects = signal.effects;
if (effects !== null) {
for (var i = 0; i < effects.length; i++) {
const effect = effects[i];
mark_subtree_inert(effect, inert, visited_blocks);
}
}
}
@ -848,7 +841,7 @@ export function mark_subtree_inert(signal, inert, visited_blocks = new Set()) {
const is_already_inert = (flags & INERT) !== 0;
if (is_already_inert !== inert) {
signal.f ^= INERT;
if (!inert && (flags & IS_EFFECT) !== 0 && (flags & CLEAN) === 0) {
if (!inert && (flags & CLEAN) === 0) {
schedule_effect(signal, false);
}
// Nested if block effects

Loading…
Cancel
Save