diff --git a/.changeset/pretty-ties-help.md b/.changeset/pretty-ties-help.md new file mode 100644 index 0000000000..f2408416d4 --- /dev/null +++ b/.changeset/pretty-ties-help.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: skip generating $.proxy() calls for unary and binary expressions diff --git a/packages/svelte/src/compiler/phases/3-transform/client/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/utils.js index b2928105e1..7b7076a69c 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/utils.js @@ -525,6 +525,8 @@ export function should_proxy_or_freeze(node) { node.type === 'Literal' || node.type === 'ArrowFunctionExpression' || node.type === 'FunctionExpression' || + node.type === 'UnaryExpression' || + node.type === 'BinaryExpression' || (node.type === 'Identifier' && node.name === 'undefined') ) { return false; diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js index 8fb2fbcf65..b53ee2523d 100644 --- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js @@ -9,16 +9,18 @@ export default function Function_prop_no_getter($$anchor, $$props) { let count = $.source(0); function onmouseup() { - $.set(count, $.proxy($.get(count) + 2)); + $.set(count, $.get(count) + 2); } + const plusOne = (num) => num + 1; /* Init */ var fragment = $.comment($$anchor); var node = $.child_frag(fragment); Button(node, { - onmousedown: () => $.set(count, $.proxy($.get(count) + 1)), + onmousedown: () => $.set(count, $.get(count) + 1), onmouseup, + onmouseenter: () => $.set(count, $.proxy(plusOne($.get(count)))), children: ($$anchor, $$slotProps) => { /* Init */ var node_1 = $.space($$anchor); diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js index ffd6a820bc..f678bb6ad6 100644 --- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js @@ -11,6 +11,7 @@ export default function Function_prop_no_getter($$payload, $$props) { count += 2; } + const plusOne = (num) => num + 1; const anchor = $.create_anchor($$payload); $$payload.out += `${anchor}`; @@ -18,6 +19,7 @@ export default function Function_prop_no_getter($$payload, $$props) { Button($$payload, { onmousedown: () => count += 1, onmouseup, + onmouseenter: () => count = plusOne(count), children: ($$payload, $$slotProps) => { $$payload.out += `clicks: ${$.escape(count)}`; } diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/index.svelte b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/index.svelte index 1ca945b8f5..53bd9ae7ca 100644 --- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/index.svelte +++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/index.svelte @@ -4,8 +4,10 @@ function onmouseup() { count += 2; } + + const plusOne = (num) => num + 1; -