diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts
index 4895c9774807..d0d7a755c33b 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] !== '$'
);
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;
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}
+