incremental-batches
Rich Harris 3 weeks ago
parent da2ab64f52
commit 55e722d690

@ -88,9 +88,10 @@ export function derived(fn) {
f: flags,
fn,
reactions: null,
rv: -1,
v: /** @type {V} */ (UNINITIALIZED),
cv: -1,
rv: 0,
wv: 0,
v: /** @type {V} */ (UNINITIALIZED),
parent: parent_derived ?? active_effect,
ac: null
};
@ -385,7 +386,7 @@ export function execute_derived(derived) {
* @returns {void}
*/
export function update_derived(derived) {
derived.rv = write_version;
derived.cv = write_version;
var old_value = derived.v;
var value = execute_derived(derived);

@ -113,7 +113,7 @@ function create_effect(type, fn) {
prev: null,
teardown: null,
wv: 0,
rv: -1,
cv: -1,
ac: null
};

@ -79,6 +79,7 @@ export function source(v, stack) {
v,
reactions: null,
equals,
cv: 0,
rv: 0,
wv: 0
};
@ -238,7 +239,7 @@ export function internal_set(source, value, updated_during_traversal = null) {
}
}
source.wv = source.rv = increment_write_version();
source.wv = source.cv = increment_write_version();
// For debugging, in case you want to know which reactions are being scheduled:
// log_reactions(source);

@ -11,8 +11,8 @@ import type { Boundary } from '../dom/blocks/boundary';
export interface Signal {
/** Flags bitmask */
f: number;
/** Read version */
rv: number;
/** Check version */
cv: number;
/** Write version */
wv: number;
}
@ -38,6 +38,8 @@ export interface Value<V = unknown> extends Signal {
set_during_effect?: boolean;
/** A function that retrieves the underlying source, used for each block item signals */
trace?: null | (() => void);
/** Read version */
rv: number;
}
export interface Reaction extends Signal {

@ -178,7 +178,7 @@ export function is_dirty(reaction) {
}
}
if (dependency.wv > reaction.rv) {
if (dependency.wv > reaction.cv) {
return true;
}
}
@ -193,7 +193,7 @@ export function is_dirty(reaction) {
}
}
reaction.rv = write_version;
reaction.cv = write_version;
return false;
}
@ -324,13 +324,13 @@ export function update_reaction(reaction) {
// so that they are not added again
if (previous_reaction.deps !== null) {
for (let i = 0; i < previous_skipped_deps; i += 1) {
// previous_reaction.deps[i].rv = read_version;
previous_reaction.deps[i].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
// dep.rv = read_version;
dep.rv = read_version;
}
}
@ -462,7 +462,7 @@ export function update_effect(effect) {
destroy_effect_children(effect);
}
effect.rv = write_version;
effect.cv = write_version;
execute_effect_teardown(effect);
var teardown = update_reaction(effect);
@ -547,7 +547,7 @@ export function get(signal) {
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
// we're in the effect init/update cycle
if (signal.rv < read_version) {
// signal.rv = read_version;
signal.rv = read_version;
// If the signal is accessing the same dependencies in the same
// order as it did last time, increment `skipped_deps`

Loading…
Cancel
Save