From 2f2af3e867d0113eb7ebb6b4a646a0148f9f9cdb Mon Sep 17 00:00:00 2001 From: Jeremy Deutsch Date: Thu, 21 Dec 2023 11:24:17 -0800 Subject: [PATCH 1/2] chore: skip emitting $.proxy() calls for more expressions --- .changeset/pretty-ties-help.md | 5 +++++ .../svelte/src/compiler/phases/3-transform/client/utils.js | 2 ++ .../_expected/client/index.svelte.js | 6 ++++-- .../_expected/server/index.svelte.js | 2 ++ .../snapshot/samples/function-prop-no-getter/index.svelte | 4 +++- 5 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 .changeset/pretty-ties-help.md diff --git a/.changeset/pretty-ties-help.md b/.changeset/pretty-ties-help.md new file mode 100644 index 000000000000..d3ad70750b89 --- /dev/null +++ b/.changeset/pretty-ties-help.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +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 7a0f8af075cd..c6f986720515 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/utils.js @@ -498,6 +498,8 @@ export function should_proxy(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 8fb2fbcf6510..b53ee2523d45 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 ffd6a820bc5a..f678bb6ad67d 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 1ca945b8f50a..53bd9ae7ca96 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; - From b871f95b96675ae31de210bd88bcb15876524b53 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 2 Jan 2024 09:23:14 +0000 Subject: [PATCH 2/2] Update pretty-ties-help.md --- .changeset/pretty-ties-help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pretty-ties-help.md b/.changeset/pretty-ties-help.md index d3ad70750b89..f2408416d4ad 100644 --- a/.changeset/pretty-ties-help.md +++ b/.changeset/pretty-ties-help.md @@ -2,4 +2,4 @@ 'svelte': patch --- -Skip generating $.proxy() calls for unary and binary expressions +fix: skip generating $.proxy() calls for unary and binary expressions