From 33ab1fdbdda4e95e48b767a3f7f8f66413b6de0e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 1 Dec 2022 15:05:57 +0100 Subject: Fix closure capturing bug with for loops --- src/model/eval.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/model/eval.rs') 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 { 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) } } -- cgit v1.2.3