diff --git a/src/compile/nodes/AwaitBlock.ts b/src/compile/nodes/AwaitBlock.ts index 4d0559711f..f8e6896b5d 100644 --- a/src/compile/nodes/AwaitBlock.ts +++ b/src/compile/nodes/AwaitBlock.ts @@ -17,13 +17,12 @@ export default class AwaitBlock extends Node { super(component, parent, scope, info); this.expression = new Expression(component, this, scope, info.expression); - const deps = this.expression.dependencies; this.value = info.value; this.error = info.error; this.pending = new PendingBlock(component, this, scope, info.pending); - this.then = new ThenBlock(component, this, scope.add(this.value, deps), info.then); - this.catch = new CatchBlock(component, this, scope.add(this.error, deps), info.catch); + this.then = new ThenBlock(component, this, scope, info.then); + this.catch = new CatchBlock(component, this, scope, info.catch); } } diff --git a/src/compile/nodes/CatchBlock.ts b/src/compile/nodes/CatchBlock.ts index a8c55860f5..6486f4a3a8 100644 --- a/src/compile/nodes/CatchBlock.ts +++ b/src/compile/nodes/CatchBlock.ts @@ -1,14 +1,19 @@ import Node from './shared/Node'; import Block from '../render-dom/Block'; import mapChildren from './shared/mapChildren'; +import TemplateScope from './shared/TemplateScope'; export default class CatchBlock extends Node { block: Block; + scope: TemplateScope; children: Node[]; constructor(component, parent, scope, info) { super(component, parent, scope, info); - this.children = mapChildren(component, parent, scope, info.children); + + this.scope = scope.child(); + this.scope.add(parent.error, parent.expression.dependencies); + this.children = mapChildren(component, parent, this.scope, info.children); this.warnIfEmptyBlock(); } diff --git a/src/compile/nodes/ThenBlock.ts b/src/compile/nodes/ThenBlock.ts index 98b6ffd31c..9921eb77c7 100644 --- a/src/compile/nodes/ThenBlock.ts +++ b/src/compile/nodes/ThenBlock.ts @@ -1,14 +1,19 @@ import Node from './shared/Node'; import Block from '../render-dom/Block'; import mapChildren from './shared/mapChildren'; +import TemplateScope from './shared/TemplateScope'; export default class ThenBlock extends Node { block: Block; + scope: TemplateScope; children: Node[]; constructor(component, parent, scope, info) { super(component, parent, scope, info); - this.children = mapChildren(component, parent, scope, info.children); + + this.scope = scope.child(); + this.scope.add(parent.value, parent.expression.dependencies); + this.children = mapChildren(component, parent, this.scope, info.children); this.warnIfEmptyBlock(); } diff --git a/src/compile/nodes/shared/Expression.ts b/src/compile/nodes/shared/Expression.ts index de1b3db32d..bae3b2400e 100644 --- a/src/compile/nodes/shared/Expression.ts +++ b/src/compile/nodes/shared/Expression.ts @@ -109,10 +109,7 @@ export default class Expression { if (isReference(node, parent)) { const { name, nodes } = flattenReference(node); - if (currentScope.has(name)) { - contextual_dependencies.add(name); - return; - } + if (currentScope.has(name)) return; expression.usesContext = true; @@ -124,6 +121,8 @@ export default class Expression { } if (scope.names.has(name)) { + contextual_dependencies.add(name); + scope.dependenciesForName.get(name).forEach(dependency => { dependencies.add(dependency); });