0
0
mirror of https://github.com/sveltejs/svelte.git synced 2024-11-29 08:32:05 +01:00

prevent duplicated reactive declarations - fixes #2054

This commit is contained in:
Rich Harris 2019-02-07 11:20:48 -05:00
parent be3808dd08
commit aa7bcb0a8e
3 changed files with 67 additions and 3 deletions

View File

@ -1056,6 +1056,10 @@ export default class Component {
});
}
if (this.reactive_declarations.indexOf(declaration) !== -1) {
return;
}
seen.add(declaration);
if (declaration.dependencies.size === 0) {
@ -1069,9 +1073,7 @@ export default class Component {
if (declaration.assignees.has(name)) return;
const earlier_declarations = lookup.get(name);
if (earlier_declarations) earlier_declarations.forEach(declaration => {
if (this.reactive_declarations.indexOf(declaration) === -1) {
add_declaration(declaration);
}
add_declaration(declaration);
});
});

View File

@ -0,0 +1,53 @@
/* generated by Svelte vX.Y.Z */
import { SvelteComponent as SvelteComponent_1, flush, 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
};
}
function instance($$self, $$props, $$invalidate) {
let { x } = $$props;
let a;
let b;
$$self.$set = $$props => {
if ('x' in $$props) $$invalidate('x', x = $$props.x);
};
$$self.$$.update = ($$dirty = { b: 1, x: 1, a: 1 }) => {
if ($$dirty.b || $$dirty.x) {
b = x; $$invalidate('b', b);
}
if ($$dirty.a || $$dirty.b) {
a = b; $$invalidate('a', a);
}
};
return { x };
}
class SvelteComponent extends SvelteComponent_1 {
constructor(options) {
super();
init(this, options, instance, create_fragment, safe_not_equal);
}
get x() {
return this.$$.ctx.x;
}
set x(x) {
this.$set({ x });
flush();
}
}
export default SvelteComponent;

View File

@ -0,0 +1,9 @@
<script>
export let x;
let a;
let b;
$: a = b;
$: b = x;
</script>