fix scoping around await blocks

pull/1864/head
Rich Harris 7 years ago
parent 5c2e945db2
commit eaed487a21

@ -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);
}
}

@ -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();
}

@ -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();
}

@ -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);
});

Loading…
Cancel
Save