pull/15579/head
Rich Harris 6 months ago
commit 1b2719f94a

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: simplify set calls for proxyable values

@ -1,5 +1,4 @@
/** @import { Location } from 'locate-character' */
/** @import { AssignmentExpression, AssignmentOperator, Expression, Identifier, Literal, MemberExpression, Pattern } from 'estree' */
/** @import { AssignmentExpression, AssignmentOperator, Expression, Identifier, Pattern } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { Context } from '../types.js' */
import * as b from '../../../../utils/builders.js';
@ -8,7 +7,7 @@ import {
get_attribute_expression,
is_event_attribute
} from '../../../../utils/ast.js';
import { dev, filename, is_ignored, locate_node, locator } from '../../../../state.js';
import { dev, is_ignored, locate_node } from '../../../../state.js';
import { should_proxy } from '../utils.js';
import { visit_assignment_expression } from '../../shared/assignments.js';

@ -150,29 +150,24 @@ export function ClassBody(node, context) {
// get foo() { return this.#foo; }
body.push(b.method('get', definition.key, [], [b.return(b.call('$.get', member))]));
if (field.kind === 'state') {
if (field.kind === 'state' || field.kind === 'raw_state') {
// set foo(value) { this.#foo = value; }
const value = b.id('value');
const prev = b.member(b.this, field.id);
body.push(
b.method(
'set',
definition.key,
[value],
[b.stmt(b.call('$.set', member, value, b.true, dev && b.true))]
[
b.stmt(
b.call('$.set', member, value, field.kind === 'state' && b.true, dev && b.true)
)
]
)
);
}
if (field.kind === 'raw_state') {
// set foo(value) { this.#foo = value; }
const value = b.id('value');
body.push(
b.method('set', definition.key, [value], [b.stmt(b.call('$.set', member, value))])
);
}
if (dev && (field.kind === 'derived' || field.kind === 'derived_by')) {
body.push(
b.method(

@ -24,4 +24,4 @@ export default function Class_state_field_constructor_assignment($$anchor, $$pro
}
$.pop();
}
}

Loading…
Cancel
Save