From 5266b537390282ddb20994595cd70ff9e938b372 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sun, 4 Aug 2019 20:48:21 -0400 Subject: [PATCH 1/4] lint --- src/compiler/compile/Component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index 5aeff019bd7e..355ad0c423b9 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -72,7 +72,7 @@ export default class Component { stats: Stats; warnings: Warning[]; ignores: Set; - ignore_stack: Set[] = []; + ignore_stack: Array> = []; ast: Ast; source: string; From eda4f90cdee476c67bda985d97e5ce6c4dd08774 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Mon, 5 Aug 2019 08:35:36 -0400 Subject: [PATCH 2/4] failing test for #3354 --- .../runtime/samples/component-slot-let-f/A.svelte | 9 +++++++++ .../runtime/samples/component-slot-let-f/B.svelte | 5 +++++ .../samples/component-slot-let-f/_config.js | 15 +++++++++++++++ .../samples/component-slot-let-f/main.svelte | 8 ++++++++ 4 files changed, 37 insertions(+) create mode 100644 test/runtime/samples/component-slot-let-f/A.svelte create mode 100644 test/runtime/samples/component-slot-let-f/B.svelte create mode 100644 test/runtime/samples/component-slot-let-f/_config.js create mode 100644 test/runtime/samples/component-slot-let-f/main.svelte diff --git a/test/runtime/samples/component-slot-let-f/A.svelte b/test/runtime/samples/component-slot-let-f/A.svelte new file mode 100644 index 000000000000..79428b13ecd8 --- /dev/null +++ b/test/runtime/samples/component-slot-let-f/A.svelte @@ -0,0 +1,9 @@ + + + + {reflected} + + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-let-f/B.svelte b/test/runtime/samples/component-slot-let-f/B.svelte new file mode 100644 index 000000000000..7a8dc596ba63 --- /dev/null +++ b/test/runtime/samples/component-slot-let-f/B.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-let-f/_config.js b/test/runtime/samples/component-slot-let-f/_config.js new file mode 100644 index 000000000000..74de38be02cc --- /dev/null +++ b/test/runtime/samples/component-slot-let-f/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + 1 + 1 + `, + + async test({ assert, target, component }) { + component.x = 2; + + assert.htmlEqual(target.innerHTML, ` + 2 + 2 + `); + } +}; diff --git a/test/runtime/samples/component-slot-let-f/main.svelte b/test/runtime/samples/component-slot-let-f/main.svelte new file mode 100644 index 000000000000..71362d9b4e2b --- /dev/null +++ b/test/runtime/samples/component-slot-let-f/main.svelte @@ -0,0 +1,8 @@ + + + + {reflected} + \ No newline at end of file From b9f5e7f24940d72fd55509d7b19810a15e5ba2cd Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Mon, 5 Aug 2019 09:14:08 -0400 Subject: [PATCH 3/4] lil bit of housekeeping --- src/compiler/compile/render_dom/wrappers/Slot.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/Slot.ts b/src/compiler/compile/render_dom/wrappers/Slot.ts index 4dd23277fb19..e072f5e4d038 100644 --- a/src/compiler/compile/render_dom/wrappers/Slot.ts +++ b/src/compiler/compile/render_dom/wrappers/Slot.ts @@ -105,7 +105,7 @@ export default class SlotWrapper extends Wrapper { } const slot = block.get_unique_name(`${sanitize(slot_name)}_slot`); - const slot_definition = block.get_unique_name(`${sanitize(slot_name)}_slot`); + const slot_definition = block.get_unique_name(`${sanitize(slot_name)}_slot_template`); block.builders.init.add_block(deindent` const ${slot_definition} = ctx.$$slots${quote_prop_if_necessary(slot_name)}; @@ -171,7 +171,10 @@ export default class SlotWrapper extends Wrapper { block.builders.update.add_block(deindent` if (${slot} && ${slot}.p && ${update_conditions}) { - ${slot}.p(@get_slot_changes(${slot_definition}, ctx, changed, ${get_slot_changes}), @get_slot_context(${slot_definition}, ctx, ${get_slot_context})); + ${slot}.p( + @get_slot_changes(${slot_definition}, ctx, changed, ${get_slot_changes}), + @get_slot_context(${slot_definition}, ctx, ${get_slot_context}) + ); } `); From 4b0ec650e9861fbc42b5ead940fc7dbdc4113e2d Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Tue, 6 Aug 2019 08:47:00 -0400 Subject: [PATCH 4/4] assume let variables are dynamic in slots - fixes #3354 --- src/compiler/compile/render_dom/wrappers/Slot.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compiler/compile/render_dom/wrappers/Slot.ts b/src/compiler/compile/render_dom/wrappers/Slot.ts index e072f5e4d038..3585d273586d 100644 --- a/src/compiler/compile/render_dom/wrappers/Slot.ts +++ b/src/compiler/compile/render_dom/wrappers/Slot.ts @@ -84,6 +84,7 @@ export default class SlotWrapper extends Wrapper { }); const dynamic_dependencies = Array.from(attribute.dependencies).filter(name => { + if (this.node.scope.is_let(name)) return true; const variable = renderer.component.var_lookup.get(name); return is_dynamic(variable); }); @@ -162,6 +163,7 @@ export default class SlotWrapper extends Wrapper { const dynamic_dependencies = Array.from(this.dependencies).filter(name => { if (name === '$$scope') return true; + if (this.node.scope.is_let(name)) return true; const variable = renderer.component.var_lookup.get(name); return is_dynamic(variable); });