diff --git a/src/compiler/compile/render_dom/invalidate.ts b/src/compiler/compile/render_dom/invalidate.ts
index b045db079f33..b468773bff0b 100644
--- a/src/compiler/compile/render_dom/invalidate.ts
+++ b/src/compiler/compile/render_dom/invalidate.ts
@@ -62,7 +62,7 @@ export function invalidate(renderer: Renderer, scope: Scope, node: Node, names:
}
let invalidate = is_store_value
- ? x`@set_store_value(${head.name.slice(1)}, ${node}, ${head.name})`
+ ? x`@set_store_value(${head.name.slice(1)}, ${node}, ${head.name}, ${extra_args})`
: !main_execution_context
? x`$$invalidate(${renderer.context_lookup.get(head.name).index}, ${node}, ${extra_args})`
: extra_args.length
diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js
new file mode 100644
index 000000000000..3d86cef8a8d2
--- /dev/null
+++ b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js
@@ -0,0 +1,9 @@
+// destructure to store value
+export default {
+ skip_if_ssr: true,
+ html: `
2 2 xxx 5 6 9 10 2
`,
+ async test({ assert, target, component }) {
+ await component.update();
+ assert.htmlEqual(target.innerHTML, `11 11 yyy 12 13 14 15 11
`);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte
new file mode 100644
index 000000000000..367c008e8ed3
--- /dev/null
+++ b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte
@@ -0,0 +1,29 @@
+
+
+{foo} {$eid} {$u.name} {$v} {$w} {$x} {$y} {$z}
diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js
index e74cea70fe3c..0318e63b0a1e 100644
--- a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js
+++ b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/_config.js
@@ -1,3 +1,9 @@
+// destructure to store
export default {
- html: `2 2 xxx 5 6
`
+ html: `2 2 xxx 5 6 9 10 2
`,
+ skip_if_ssr: true,
+ async test({ assert, target, component }) {
+ await component.update();
+ assert.htmlEqual(target.innerHTML, `11 11 yyy 12 13 14 15 11
`);
+ }
};
\ No newline at end of file
diff --git a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte
index 5ad442e1dad8..cd4922353522 100644
--- a/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte
+++ b/test/runtime/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte
@@ -6,11 +6,24 @@
let u;
let v;
let w;
+ let x;
+ let y;
[u, v, w] = [
{id: eid = writable(foo = 2), name: 'xxx'},
5,
writable(6)
];
+ ({ a: x, b: y } = { a: writable(9), b: writable(10) });
+ $: z = u.id;
+
+ export function update() {
+ [u, v, w] = [
+ {id: eid = writable(foo = 11), name: 'yyy'},
+ 12,
+ writable(13)
+ ];
+ ({ a: x, b: y } = { a: writable(14), b: writable(15) });
+ }
-{foo} {$eid} {u.name} {v} {$w}
+{foo} {$eid} {u.name} {v} {$w} {$x} {$y} {$z}