Skip to content

Commit 3576c74

Browse files
authored
fix: Make sure 'func' doesn't clash with destructured contexts (#8840)
Fixes: #8753
1 parent c0d9262 commit 3576c74

File tree

8 files changed

+67
-0
lines changed

8 files changed

+67
-0
lines changed

.changeset/eight-emus-allow.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+
fix: ensure identifiers in destructuring contexts don't clash with existing ones

packages/svelte/src/compiler/compile/nodes/shared/Context.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export function unpack_destructuring({
3636
if (in_rest_element) {
3737
context_rest_properties.set(node.name, node);
3838
}
39+
component.used_names.add(node.name);
3940
} else if (node.type === 'ArrayPattern') {
4041
node.elements.forEach((element, i) => {
4142
if (!element) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export default {
2+
get props() {
3+
return {
4+
thePromise: new Promise((_) => {})
5+
};
6+
},
7+
8+
html: `
9+
Waiting...
10+
`,
11+
12+
async test({ assert, component, target }) {
13+
await (component.thePromise = Promise.resolve({ func: 12345 }));
14+
15+
assert.htmlEqual(target.innerHTML, '12345');
16+
17+
try {
18+
await (component.thePromise = Promise.reject({ func: 67890 }));
19+
} catch (e) {
20+
// do nothing
21+
}
22+
23+
assert.htmlEqual(target.innerHTML, '67890');
24+
}
25+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
export let thePromise;
3+
</script>
4+
5+
{#await thePromise}
6+
Waiting...
7+
{:then { func }}
8+
{(() => func)()}
9+
{:catch { func: func_1 }}
10+
{(() => func_1)()}
11+
{/await}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default {
2+
html: `
3+
[12,13,14]
4+
`
5+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
const func = 100;
3+
</script>
4+
5+
{#if true}
6+
{@const [func_1] = [[12, 13, 14]]}
7+
{(() => JSON.stringify(func_1))()}
8+
{/if}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default {
2+
html: `
3+
<p>1</p>
4+
<p>2</p>
5+
<p>3</p>
6+
<p>4</p>
7+
<p>5</p>
8+
`
9+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{#each [1, 2, 3, 4, 5] as func}
2+
<p>{(() => func)()}</p>
3+
{/each}

0 commit comments

Comments
 (0)