pull/17038/head
Rich Harris 4 days ago
parent 92e0fc23f6
commit 158013473f

@ -10,16 +10,13 @@ import * as e from '../../../errors.js';
export function AwaitExpression(node, context) { export function AwaitExpression(node, context) {
const tla = context.state.ast_type === 'instance' && context.state.function_depth === 1; const tla = context.state.ast_type === 'instance' && context.state.function_depth === 1;
// preserve context for // preserve context for awaits that precede other expressions in template or `$derived(...)`
// a) top-level await and
// b) awaits that precede other expressions in template or `$derived(...)`
if ( if (
tla || is_reactive_expression(
(is_reactive_expression(
context.path, context.path,
context.state.derived_function_depth === context.state.function_depth context.state.derived_function_depth === context.state.function_depth
) && ) &&
!is_last_evaluated_expression(context.path, node)) !is_last_evaluated_expression(context.path, node)
) { ) {
context.state.analysis.pickled_awaits.add(node); context.state.analysis.pickled_awaits.add(node);
} }

@ -314,10 +314,11 @@ function transform_body(program, context) {
} }
if (s.node.type === 'ExpressionStatement') { if (s.node.type === 'ExpressionStatement') {
return b.thunk( const expression = /** @type {Expression} */ (context.visit(s.node.expression));
b.unary('void', /** @type {Expression} */ (context.visit(s.node.expression))),
s.has_await return expression.type === 'AwaitExpression'
); ? b.thunk(expression, true)
: b.thunk(b.unary('void', expression), s.has_await);
} }
return b.thunk(b.block([/** @type {Statement} */ (context.visit(s.node))]), s.has_await); return b.thunk(b.block([/** @type {Statement} */ (context.visit(s.node))]), s.has_await);

@ -184,10 +184,11 @@ function transform_body(program, context) {
} }
if (s.node.type === 'ExpressionStatement') { if (s.node.type === 'ExpressionStatement') {
return b.thunk( const expression = /** @type {Expression} */ (context.visit(s.node.expression));
b.unary('void', /** @type {Expression} */ (context.visit(s.node.expression))),
s.has_await return expression.type === 'AwaitExpression'
); ? b.thunk(expression, true)
: b.thunk(b.unary('void', expression), s.has_await);
} }
return b.thunk(b.block([/** @type {Statement} */ (context.visit(s.node))]), s.has_await); return b.thunk(b.block([/** @type {Statement} */ (context.visit(s.node))]), s.has_await);

Loading…
Cancel
Save