From 94b583afff3cf4a698e98cef66f47239268d359e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bendeg=C3=BAz=20Hajnal?= Date: Sun, 8 Sep 2019 01:42:49 +0200 Subject: [PATCH 1/3] Added test --- .../samples/assignment-anywhere/expected.js | 95 +++++++++++++++++++ .../samples/assignment-anywhere/input.svelte | 25 +++++ 2 files changed, 120 insertions(+) create mode 100644 test/js/samples/assignment-anywhere/expected.js create mode 100644 test/js/samples/assignment-anywhere/input.svelte diff --git a/test/js/samples/assignment-anywhere/expected.js b/test/js/samples/assignment-anywhere/expected.js new file mode 100644 index 000000000000..4d513cf0f5fd --- /dev/null +++ b/test/js/samples/assignment-anywhere/expected.js @@ -0,0 +1,95 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + append, + attr, + detach, + element, + init, + insert, + listen, + noop, + safe_not_equal, + set_data, + space, + text +} from "svelte/internal"; + +function create_fragment(ctx) { + var button, t1, span, t2, t3, span_class_value, dispose; + + return { + c() { + button = element("button"); + button.textContent = "Click"; + t1 = space(); + span = element("span"); + t2 = text("text + "); + t3 = text(ctx.num); + attr(span, "class", span_class_value = "text " + (ctx.toggle ? "red" : "blue")); + dispose = listen(button, "click", ctx._toggleMe); + }, + + m(target, anchor) { + insert(target, button, anchor); + insert(target, t1, anchor); + insert(target, span, anchor); + append(span, t2); + append(span, t3); + }, + + p(changed, ctx) { + if (changed.num) { + set_data(t3, ctx.num); + } + + if ((changed.toggle) && span_class_value !== (span_class_value = "text " + (ctx.toggle ? "red" : "blue"))) { + attr(span, "class", span_class_value); + } + }, + + i: noop, + o: noop, + + d(detaching) { + if (detaching) { + detach(button); + detach(t1); + detach(span); + } + + dispose(); + } + }; +} + +function instance($$self, $$props, $$invalidate) { + let toggle = false; + let num = 1 + + function _toggleMe() { + + if ($$invalidate('toggle', toggle = !toggle)) { + console.log(toggle); + } else { + console.log(toggle); + } + } + + function _increaseMe(){ + if($$invalidate('num', num += 3)){ + console.log('num has been increased') + } + } + + return { toggle, num, _toggleMe }; +} + +class Component extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, []); + } +} + +export default Component; diff --git a/test/js/samples/assignment-anywhere/input.svelte b/test/js/samples/assignment-anywhere/input.svelte new file mode 100644 index 000000000000..7f2099cac07d --- /dev/null +++ b/test/js/samples/assignment-anywhere/input.svelte @@ -0,0 +1,25 @@ + + + + + text + {num} + From bbf53e87507e8e41281d0dbbfdfe8a365b0549a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bendeg=C3=BAz=20Hajnal?= Date: Sun, 8 Sep 2019 01:44:58 +0200 Subject: [PATCH 2/3] Implemented inline invalidating --- src/compiler/compile/render_dom/index.ts | 2 +- src/runtime/internal/Component.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index 4895c9774807..ee17ba76b847 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -195,7 +195,6 @@ export default function dom( const single = ( node.type === 'AssignmentExpression' && assignee.type === 'Identifier' && - parent.type === 'ExpressionStatement' && assignee.name[0] !== '$' ); @@ -205,6 +204,7 @@ export default function dom( const variable = component.var_lookup.get(name); if (variable && (variable.hoistable || variable.global || variable.module)) return; + debugger if (single && !(variable.subscribable && variable.reassigned)) { if (variable.referenced || variable.is_reactive_dependency || variable.export_name) { diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts index 92e227e57cc6..55490838c9b9 100644 --- a/src/runtime/internal/Component.ts +++ b/src/runtime/internal/Component.ts @@ -106,6 +106,7 @@ export function init(component, options, instance, create_fragment, not_equal, p if ($$.bound[key]) $$.bound[key](value); if (ready) make_dirty(component, key); } + return value; }) : props; From 6abc8c640ea7cd7509a7d896f7cfbcfd36f8c4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bendeg=C3=BAz=20Hajnal?= Date: Sun, 8 Sep 2019 01:57:04 +0200 Subject: [PATCH 3/3] Remove debugger --- src/compiler/compile/render_dom/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index ee17ba76b847..d0d7a755c33b 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -204,7 +204,6 @@ export default function dom( const variable = component.var_lookup.get(name); if (variable && (variable.hoistable || variable.global || variable.module)) return; - debugger if (single && !(variable.subscribable && variable.reassigned)) { if (variable.referenced || variable.is_reactive_dependency || variable.export_name) {