diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts index 310800c197..e4a623f8c7 100644 --- a/src/compile/render-dom/index.ts +++ b/src/compile/render-dom/index.ts @@ -314,7 +314,13 @@ export default function dom( if (has_definition) { const reactive_declarations = component.reactive_declarations.map(d => { - const condition = Array.from(d.dependencies).map(n => `$$dirty.${n}`).join(' || '); + const condition = Array.from(d.dependencies) + .filter(n => { + const variable = component.var_lookup.get(n); + return variable && variable.writable; + }) + .map(n => `$$dirty.${n}`).join(' || '); + const snippet = d.node.body.type === 'BlockStatement' ? `[✂${d.node.body.start}-${d.node.end}✂]` : deindent` diff --git a/test/js/samples/reactive-values-non-writable-dependencies/expected.js b/test/js/samples/reactive-values-non-writable-dependencies/expected.js new file mode 100644 index 0000000000..fc2ca37d31 --- /dev/null +++ b/test/js/samples/reactive-values-non-writable-dependencies/expected.js @@ -0,0 +1,40 @@ +/* generated by Svelte vX.Y.Z */ +import { SvelteComponent as SvelteComponent_1, init, noop, safe_not_equal } from "svelte/internal"; + +function create_fragment(ctx) { + return { + c: noop, + m: noop, + p: noop, + i: noop, + o: noop, + d: noop + }; +} + +let a = 1; + +let b = 2; + +function instance($$self, $$props, $$invalidate) { + + + let max; + + $$self.$$.update = ($$dirty = { max: 1, Math: 1, a: 1, b: 1 }) => { + if ($$dirty.max || $$dirty.a || $$dirty.b) { + max = Math.max(a, b); $$invalidate('max', max); + } + }; + + return {}; +} + +class SvelteComponent extends SvelteComponent_1 { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal); + } +} + +export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/reactive-values-non-writable-dependencies/input.html b/test/js/samples/reactive-values-non-writable-dependencies/input.html new file mode 100644 index 0000000000..8e3397e40d --- /dev/null +++ b/test/js/samples/reactive-values-non-writable-dependencies/input.html @@ -0,0 +1,7 @@ + \ No newline at end of file