summaryrefslogtreecommitdiff
path: root/src/model/eval.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-01 15:05:57 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-02 13:08:06 +0100
commit33ab1fdbdda4e95e48b767a3f7f8f66413b6de0e (patch)
tree4481ae8f0bf11a71b6002561d1ab6f43a4d52a23 /src/model/eval.rs
parente1e93938a148402d67cb06c25c674aa973598b03 (diff)
Fix closure capturing bug with for loops
Diffstat (limited to 'src/model/eval.rs')
-rw-r--r--src/model/eval.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/model/eval.rs b/src/model/eval.rs
index 166dadde..43cdbbcc 100644
--- a/src/model/eval.rs
+++ b/src/model/eval.rs
@@ -1008,10 +1008,11 @@ impl Eval for ast::ForLoop {
fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> {
let flow = vm.flow.take();
let mut output = Value::None;
- vm.scopes.enter();
macro_rules! iter {
(for ($($binding:ident => $value:ident),*) in $iter:expr) => {{
+ vm.scopes.enter();
+
#[allow(unused_parens)]
for ($($value),*) in $iter {
$(vm.scopes.top.define($binding.clone(), $value);)*
@@ -1031,10 +1032,12 @@ impl Eval for ast::ForLoop {
}
}
+ vm.scopes.exit();
}};
}
let iter = self.iter().eval(vm)?;
+
let pattern = self.pattern();
let key = pattern.key().map(ast::Ident::take);
let value = pattern.value().take();
@@ -1076,7 +1079,6 @@ impl Eval for ast::ForLoop {
vm.flow = flow;
}
- vm.scopes.exit();
Ok(output)
}
}