pull/16060/head
Rich Harris 4 months ago
parent 2add7b3d1e
commit dc46df7a8a

@ -67,11 +67,13 @@ function build_assignment(operator, left, right, context) {
in_constructor: rune !== '$derived' && rune !== '$derived.by'
};
return b.assignment(
operator,
b.member(b.this, field.key),
/** @type {Expression} */ (context.visit(right, child_state))
);
let value = /** @type {Expression} */ (context.visit(right, child_state));
if (dev) {
value = b.call('$.tag', value, b.literal(name));
}
return b.assignment(operator, b.member(b.this, field.key), value);
}
}

@ -1,4 +1,4 @@
/** @import { CallExpression, ClassDeclaration, ClassExpression, Expression } from 'estree' */
/** @import { AssignmentExpression, CallExpression, Expression } from 'estree' */
/** @import { Context } from '../types' */
import { dev, is_ignored } from '../../../../state.js';
import * as b from '#compiler/builders';
@ -39,44 +39,16 @@ export function CallExpression(node, context) {
value = b.call('$.proxy', value);
}
}
let source_tag;
const parent = context.path.at(-1);
if (
dev &&
parent?.type === 'AssignmentExpression' &&
parent?.left?.type === 'MemberExpression' &&
context.state.in_constructor
) {
const constructor = context.path.findLast(
(parent) => parent.type === 'ClassDeclaration' || parent.type === 'ClassExpression'
);
const property = get_name(parent.left.property);
source_tag = `${constructor?.id?.name ?? '[class]'}.${property}`;
}
const call = b.call('$.state', value);
return dev ? b.call('$.tag', call, b.literal(/** @type {string} */ (source_tag))) : call;
return b.call('$.state', value);
}
case '$derived':
case '$derived.by': {
let fn = /** @type {Expression} */ (context.visit(node.arguments[0]));
if (rune === '$derived') fn = b.thunk(fn);
let source_tag;
const parent = context.path.at(-1);
if (
dev &&
parent?.type === 'AssignmentExpression' &&
parent?.left?.type === 'MemberExpression' &&
context.state.in_constructor
) {
const constructor = context.path.findLast(
(parent) => parent.type === 'ClassDeclaration' || parent.type === 'ClassExpression'
);
const property = get_name(parent.left.property);
source_tag = `${constructor?.id?.name ?? '[class]'}.${property}`;
}
const call = b.call('$.derived', fn);
return dev ? b.call('$.tag', call, b.literal(/** @type {string} */ (source_tag))) : call;
return b.call('$.derived', fn);
}
case '$state.snapshot':

Loading…
Cancel
Save