From 4d4ab2a20426d0603498ec9be44adb607e207f27 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Wed, 13 Mar 2024 15:09:54 +0000 Subject: [PATCH] simplify set implementation --- .../svelte/src/internal/client/runtime.js | 1 + packages/svelte/src/reactivity/set.js | 46 +++++++------------ 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 4c45dd0f22..a20c55cd4f 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -497,6 +497,7 @@ export function schedule_effect(signal, sync) { } } if ((flags & EFFECT) !== 0) { + debugger current_queued_effects.push(signal); // Prevent any nested user effects from potentially triggering // before this effect is scheduled. We know they will be destroyed diff --git a/packages/svelte/src/reactivity/set.js b/packages/svelte/src/reactivity/set.js index dcd544671d..1198e85162 100644 --- a/packages/svelte/src/reactivity/set.js +++ b/packages/svelte/src/reactivity/set.js @@ -35,8 +35,8 @@ var inited = false; * @template T */ export class ReactiveSet extends Set { - /** @type {Map>} */ - #sources = new Map(); + /** @type {Set} */ + #entries = new Set(); #version = source(0); #size = source(0); @@ -81,25 +81,17 @@ export class ReactiveSet extends Set { /** @param {T} value */ has(value) { - var source = this.#sources.get(value); - // We should always track the version in case - // the Set ever gets this value in the future. get(this.#version); - - if (source === undefined) { - return false; - } - - return get(source); + return this.#entries.has(value); } /** @param {T} value */ add(value) { - var sources = this.#sources; + var entries = this.#entries; - if (!sources.has(value)) { - sources.set(value, source(true)); - set(this.#size, sources.size); + if (!entries.has(value)) { + entries.add(value); + set(this.#size, entries.size); this.#increment_version(); } @@ -108,13 +100,11 @@ export class ReactiveSet extends Set { /** @param {T} value */ delete(value) { - var sources = this.#sources; - var source = sources.get(value); + var entries = this.#entries; - if (source !== undefined) { - sources.delete(value); - set(this.#size, sources.size); - set(source, false); + if (entries.has(value)) { + entries.delete(value); + set(this.#size, entries.size); this.#increment_version(); } @@ -122,18 +112,14 @@ export class ReactiveSet extends Set { } clear() { - var sources = this.#sources; + var entries = this.#entries; - if (sources.size !== 0) { + if (entries.size !== 0) { set(this.#size, 0); - for (var source of sources.values()) { - set(source, false); - } this.#increment_version(); + entries.clear(); + super.clear(); } - - sources.clear(); - super.clear(); } keys() { @@ -143,7 +129,7 @@ export class ReactiveSet extends Set { values() { get(this.#version); - var iterator = this.#sources.keys(); + var iterator = this.#entries.keys(); return make_iterable( /** @type {IterableIterator} */ ({