chore: simplify pop

pull/16331/head
Rich Harris 2 months ago
parent 71ed9e4648
commit 639010f3ee

@ -176,36 +176,28 @@ export function push(props, runes = false, fn) {
* @returns {T} * @returns {T}
*/ */
export function pop(component) { export function pop(component) {
const context_stack_item = component_context; if (component_context !== null) {
if (context_stack_item !== null) {
if (component !== undefined) { if (component !== undefined) {
context_stack_item.x = component; component_context.x = component;
} }
const component_effects = context_stack_item.e;
if (component_effects !== null) { const effects = component_context.e;
var previous_effect = active_effect; if (effects !== null) {
var previous_reaction = active_reaction; component_context.e = null;
context_stack_item.e = null; for (var fn of effects) {
try { create_user_effect(fn);
for (var i = 0; i < component_effects.length; i++) {
var component_effect = component_effects[i];
set_active_effect(component_effect.effect);
set_active_reaction(component_effect.reaction);
create_user_effect(component_effect.fn);
}
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
} }
} }
component_context = context_stack_item.p;
component_context.m = true;
component_context = component_context.p;
if (DEV) { if (DEV) {
dev_current_component_function = context_stack_item.p?.function ?? null; dev_current_component_function = component_context?.function ?? null;
} }
context_stack_item.m = true;
} }
// Micro-optimization: Don't set .a above to the empty object
// so it can be garbage-collected when the return here is unused
return component || /** @type {T} */ ({}); return component || /** @type {T} */ ({});
} }

@ -195,11 +195,7 @@ export function user_effect(fn) {
if (defer) { if (defer) {
var context = /** @type {ComponentContext} */ (component_context); var context = /** @type {ComponentContext} */ (component_context);
(context.e ??= []).push({ (context.e ??= []).push(fn);
fn,
effect: active_effect,
reaction: active_reaction
});
} else { } else {
return create_user_effect(fn); return create_user_effect(fn);
} }

@ -17,11 +17,7 @@ export type ComponentContext = {
/** destroyed */ /** destroyed */
d: boolean; d: boolean;
/** deferred effects */ /** deferred effects */
e: null | Array<{ e: null | Array<() => void | (() => void)>;
fn: () => void | (() => void);
effect: null | Effect;
reaction: null | Reaction;
}>;
/** mounted */ /** mounted */
m: boolean; m: boolean;
/** /**

Loading…
Cancel
Save