pull/17038/head
Rich Harris 4 days ago
parent 249faa5588
commit 271623f6b2

@ -269,7 +269,7 @@ export function RegularElement(node, context) {
context, context,
(value, metadata) => (value, metadata) =>
metadata.has_call || metadata.has_await metadata.has_call || metadata.has_await
? context.state.memoizer.add(value, metadata.has_await) ? context.state.memoizer.add(value, metadata)
: value : value
); );
@ -511,7 +511,7 @@ export function build_class_directives_object(
const directives = b.object(properties); const directives = b.object(properties);
return has_call_or_state || has_await ? memoizer.add(directives, has_await) : directives; return has_call_or_state || has_await ? memoizer.add(directives, metadata) : directives;
} }
/** /**
@ -546,7 +546,7 @@ export function build_style_directives_object(
const directives = important.properties.length ? b.array([normal, important]) : normal; const directives = important.properties.length ? b.array([normal, important]) : normal;
return has_call_or_state || has_await ? memoizer.add(directives, has_await) : directives; return has_call_or_state || has_await ? memoizer.add(directives, metadata) : directives;
} }
/** /**
@ -675,7 +675,7 @@ function build_element_special_value_attribute(
element === 'select' && attribute.value !== true && !is_text_attribute(attribute); element === 'select' && attribute.value !== true && !is_text_attribute(attribute);
const { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) => const { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>
metadata.has_call || metadata.has_await ? state.memoizer.add(value, metadata.has_await) : value metadata.has_call || metadata.has_await ? state.memoizer.add(value, metadata) : value
); );
const evaluated = context.state.scope.evaluate(value); const evaluated = context.state.scope.evaluate(value);

@ -26,7 +26,7 @@ export function RenderTag(node, context) {
let expression = build_expression(context, arg, metadata); let expression = build_expression(context, arg, metadata);
if (metadata.has_await || metadata.has_call) { if (metadata.has_await || metadata.has_call) {
expression = b.call('$.get', memoizer.add(expression, metadata.has_await)); expression = b.call('$.get', memoizer.add(expression, metadata));
} }
args.push(b.thunk(expression)); args.push(b.thunk(expression));

@ -35,7 +35,7 @@ export function SlotElement(node, context) {
context, context,
(value, metadata) => (value, metadata) =>
metadata.has_call || metadata.has_await metadata.has_call || metadata.has_await
? b.call('$.get', memoizer.add(value, metadata.has_await)) ? b.call('$.get', memoizer.add(value, metadata))
: value : value
); );

@ -134,7 +134,7 @@ export function build_component(node, component_name, context) {
props_and_spreads.push( props_and_spreads.push(
b.thunk( b.thunk(
attribute.metadata.expression.has_await || attribute.metadata.expression.has_call attribute.metadata.expression.has_await || attribute.metadata.expression.has_call
? b.call('$.get', memoizer.add(expression, attribute.metadata.expression.has_await)) ? b.call('$.get', memoizer.add(expression, attribute.metadata.expression))
: expression : expression
) )
); );
@ -149,7 +149,7 @@ export function build_component(node, component_name, context) {
build_attribute_value(attribute.value, context, (value, metadata) => { build_attribute_value(attribute.value, context, (value, metadata) => {
// TODO put the derived in the local block // TODO put the derived in the local block
return metadata.has_call || metadata.has_await return metadata.has_call || metadata.has_await
? b.call('$.get', memoizer.add(value, metadata.has_await)) ? b.call('$.get', memoizer.add(value, metadata))
: value; : value;
}).value }).value
) )
@ -184,9 +184,7 @@ export function build_component(node, component_name, context) {
); );
}); });
return should_wrap_in_derived return should_wrap_in_derived ? b.call('$.get', memoizer.add(value, metadata)) : value;
? b.call('$.get', memoizer.add(value, metadata.has_await))
: value;
} }
); );

@ -35,7 +35,7 @@ export function build_attribute_effect(
for (const attribute of attributes) { for (const attribute of attributes) {
if (attribute.type === 'Attribute') { if (attribute.type === 'Attribute') {
const { value } = build_attribute_value(attribute.value, context, (value, metadata) => const { value } = build_attribute_value(attribute.value, context, (value, metadata) =>
metadata.has_call || metadata.has_await ? memoizer.add(value, metadata.has_await) : value metadata.has_call || metadata.has_await ? memoizer.add(value, metadata) : value
); );
if ( if (
@ -53,7 +53,7 @@ export function build_attribute_effect(
let value = /** @type {Expression} */ (context.visit(attribute)); let value = /** @type {Expression} */ (context.visit(attribute));
if (attribute.metadata.expression.has_call || attribute.metadata.expression.has_await) { if (attribute.metadata.expression.has_call || attribute.metadata.expression.has_await) {
value = memoizer.add(value, attribute.metadata.expression.has_await); value = memoizer.add(value, attribute.metadata.expression);
} }
values.push(b.spread(value)); values.push(b.spread(value));
@ -156,7 +156,7 @@ export function build_set_class(element, node_id, attribute, class_directives, c
} }
return metadata.has_call || metadata.has_await return metadata.has_call || metadata.has_await
? context.state.memoizer.add(value, metadata.has_await) ? context.state.memoizer.add(value, metadata)
: value; : value;
}); });
@ -227,7 +227,7 @@ export function build_set_class(element, node_id, attribute, class_directives, c
*/ */
export function build_set_style(node_id, attribute, style_directives, context) { export function build_set_style(node_id, attribute, style_directives, context) {
let { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) => let { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>
metadata.has_call ? context.state.memoizer.add(value, metadata.has_await) : value metadata.has_call ? context.state.memoizer.add(value, metadata) : value
); );
/** @type {Identifier | undefined} */ /** @type {Identifier | undefined} */

@ -23,12 +23,12 @@ export class Memoizer {
/** /**
* @param {Expression} expression * @param {Expression} expression
* @param {boolean} has_await * @param {ExpressionMetadata} metadata
*/ */
add(expression, has_await) { add(expression, metadata) {
const id = b.id('#'); // filled in later const id = b.id('#'); // filled in later
(has_await ? this.#async : this.#sync).push({ id, expression }); (metadata.has_await ? this.#async : this.#sync).push({ id, expression });
return id; return id;
} }
@ -73,7 +73,7 @@ export function build_template_chunk(
context, context,
state = context.state, state = context.state,
memoize = (value, metadata) => memoize = (value, metadata) =>
metadata.has_call || metadata.has_await ? state.memoizer.add(value, metadata.has_await) : value metadata.has_call || metadata.has_await ? state.memoizer.add(value, metadata) : value
) { ) {
/** @type {Expression[]} */ /** @type {Expression[]} */
const expressions = []; const expressions = [];

Loading…
Cancel
Save