Skip to content

Commit 26c6d6f

Browse files
authored
chore: avoid creating unnecessary thunks (#9841)
Co-authored-by: Rich Harris <[email protected]>
1 parent 8dfb289 commit 26c6d6f

File tree

4 files changed

+20
-6
lines changed

4 files changed

+20
-6
lines changed

.changeset/poor-seahorses-flash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
chore: avoid creating thunk for call expressions when appropriate

packages/svelte/src/compiler/utils/builders.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,18 @@ export function template(elements, expressions) {
370370

371371
/**
372372
* @param {import('estree').Expression | import('estree').BlockStatement} expression
373-
* @returns {import('estree').ArrowFunctionExpression}
373+
* @returns {import('estree').Expression}
374374
*/
375375
export function thunk(expression) {
376+
if (
377+
expression.type === 'CallExpression' &&
378+
expression.callee.type !== 'Super' &&
379+
expression.callee.type !== 'MemberExpression' &&
380+
expression.arguments.length === 0
381+
) {
382+
return expression.callee;
383+
}
384+
376385
return arrow([], expression);
377386
}
378387

packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ export default function Main($$anchor, $$props) {
2121
var custom_element_1 = $.sibling($.sibling(svg_1));
2222

2323
/* Update */
24-
$.attr_effect(div, "foobar", () => y());
25-
$.attr_effect(svg_1, "viewBox", () => y());
26-
$.set_custom_element_data_effect(custom_element_1, "fooBar", () => y());
24+
$.attr_effect(div, "foobar", y);
25+
$.attr_effect(svg_1, "viewBox", y);
26+
$.set_custom_element_data_effect(custom_element_1, "fooBar", y);
2727

2828
var node_foobar;
2929
var svg_viewBox;
@@ -45,4 +45,4 @@ export default function Main($$anchor, $$props) {
4545

4646
$.close_frag($$anchor, fragment);
4747
$.pop();
48-
}
48+
}

packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function Svelte_element($$anchor, $$props) {
1111
var fragment = $.comment($$anchor);
1212
var node = $.child_frag(fragment);
1313

14-
$.element(node, () => tag());
14+
$.element(node, tag);
1515
$.close_frag($$anchor, fragment);
1616
$.pop();
1717
}

0 commit comments

Comments
 (0)