Skip to content

Commit 9d01d36

Browse files
committed
fix template effects
1 parent c2a6207 commit 9d01d36

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { is_ignored } from '../../../../../state.js';
77
import { is_event_attribute } from '../../../../../utils/ast.js';
88
import * as b from '#compiler/builders';
99
import { build_class_directives_object, build_style_directives_object } from '../RegularElement.js';
10-
import { build_template_chunk, get_expression_id } from './utils.js';
10+
import { build_expression, build_template_chunk, get_expression_id } from './utils.js';
1111

1212
/**
1313
* @param {Array<AST.Attribute | AST.SpreadAttribute>} attributes
@@ -121,7 +121,7 @@ export function build_attribute_value(value, context, memoize = (value) => value
121121
return { value: b.literal(chunk.data), has_state: false };
122122
}
123123

124-
let expression = /** @type {Expression} */ (context.visit(chunk.expression));
124+
let expression = build_expression(context, chunk.expression, chunk.metadata.expression);
125125

126126
return {
127127
value: memoize(expression, chunk.metadata.expression),

packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export function build_template_chunk(
6666
state.scope.get('undefined')
6767
) {
6868
let value = memoize(
69-
/** @type {Expression} */ (context.visit(node.expression, state)),
69+
build_expression(context, node.expression, node.metadata.expression, state),
7070
node.metadata.expression
7171
);
7272

@@ -367,8 +367,8 @@ export function validate_mutation(node, context, expression) {
367367
* @param {Expression} expression
368368
* @param {ExpressionMetadata} metadata
369369
*/
370-
export function build_expression(context, expression, metadata) {
371-
const value = /** @type {Expression} */ (context.visit(expression));
370+
export function build_expression(context, expression, metadata, state = context.state) {
371+
const value = /** @type {Expression} */ (context.visit(expression, state));
372372

373373
if (context.state.analysis.runes) {
374374
return value;
@@ -385,7 +385,7 @@ export function build_expression(context, expression, metadata) {
385385
continue;
386386
}
387387

388-
var getter = build_getter({ ...binding.node }, context.state);
388+
var getter = build_getter({ ...binding.node }, state);
389389

390390
if (binding.kind === 'bindable_prop') {
391391
getter = b.call('$.deep_read_state', getter);

packages/svelte/tests/runtime-legacy/samples/block-expression-fn-call/_config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export default test({
55
test({ assert, target }) {
66
const button = target.querySelector('button');
77

8-
assert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> 10 - 10`);
8+
assert.htmlEqual(target.innerHTML, `<div></div><button data-foo="true">inc</button> 12 - 12`);
99
flushSync(() => button?.click());
10-
assert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> 11 - 10`);
10+
assert.htmlEqual(target.innerHTML, `<div></div><button data-foo="true">inc</button> 13 - 12`);
1111
}
1212
});

packages/svelte/tests/runtime-legacy/samples/block-expression-fn-call/main.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
{x}
3131
{/key}
3232

33-
<button on:click={() => count1++}>inc</button>
33+
<button data-foo={fn(true)} on:click={() => count1++}>{fn('inc')}</button>
3434
{count1} - {count2}
3535

3636

0 commit comments

Comments
 (0)