From 2dd7f7824ff8be57d2e6600d45f2c2d10e6e21ea Mon Sep 17 00:00:00 2001 From: Nic <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Fri, 18 Sep 2026 10:32:28 -0400 Subject: [PATCH] a var declared again: its declarator has the binding, and an initializer there reassigns --- packages/svelte/src/compiler/phases/scope.js | 16 +++++++++++++++- .../samples/var-redeclared/_config.js | 5 +++++ .../samples/var-redeclared/main.svelte | 9 +++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 packages/svelte/tests/runtime-legacy/samples/var-redeclared/_config.js create mode 100644 packages/svelte/tests/runtime-legacy/samples/var-redeclared/main.svelte diff --git a/packages/svelte/src/compiler/phases/scope.js b/packages/svelte/src/compiler/phases/scope.js index f0885f8545..1c2f8ccf5c 100644 --- a/packages/svelte/src/compiler/phases/scope.js +++ b/packages/svelte/src/compiler/phases/scope.js @@ -1183,7 +1183,21 @@ export function create_scopes(ast, root, allow_reactive_declarations, parent) { ]); } for (const reference of answer.references) { - if (reference.declares) continue; + if (reference.declares) { + // `var x` again: the declarator declares the binding the first one made + const ours = reference.binding === null ? undefined : from_parser.get(reference.binding); + /** @type {any} */ + let declarator = parentOf(reference.node); + while (declarator && /Pattern$|^Property$|^RestElement$/.test(declarator.type)) { + declarator = parentOf(declarator); + } + if (ours && declarator?.type === 'VariableDeclarator') { + declarators.push([declarator, ours]); + // an initializer there assigns again, so the first one is not the value + if (reference.write) ours.reassigned = true; + } + continue; + } const binding = reference.binding === null ? undefined : from_parser.get(reference.binding); entries.push([ reference.node, diff --git a/packages/svelte/tests/runtime-legacy/samples/var-redeclared/_config.js b/packages/svelte/tests/runtime-legacy/samples/var-redeclared/_config.js new file mode 100644 index 0000000000..a2414b8830 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/var-redeclared/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: '
42 3 4
' +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/var-redeclared/main.svelte b/packages/svelte/tests/runtime-legacy/samples/var-redeclared/main.svelte new file mode 100644 index 0000000000..01a98b23bc --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/var-redeclared/main.svelte @@ -0,0 +1,9 @@ + + +{test} {a} {c}