summaryrefslogtreecommitdiff
path: root/src/eval/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-01-27 13:55:04 +0100
committerLaurenz <laurmaedje@gmail.com>2021-01-27 13:55:04 +0100
commit2641c2d20ef5ddaf8e1dc91f4a69abfe2c170e4d (patch)
treeb4da89ca8b882e24d6ae306e0c041a525efecd80 /src/eval/mod.rs
parentce8138c68557a2d158424a8aa6056d73ff9cb1ba (diff)
Always evaluate for loop to template 🔁
Diffstat (limited to 'src/eval/mod.rs')
-rw-r--r--src/eval/mod.rs16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs
index cadffef5..13d242f8 100644
--- a/src/eval/mod.rs
+++ b/src/eval/mod.rs
@@ -388,11 +388,7 @@ impl Eval for Spanned<&ExprFor> {
fn eval(self, ctx: &mut EvalContext) -> Self::Output {
let iter = self.v.iter.eval(ctx);
- let mut output = if let Expr::Template(_) = self.v.body.v {
- Value::Template(vec![])
- } else {
- Value::None
- };
+ let mut output = vec![];
macro_rules! iterate {
(for ($($binding:ident => $value:ident),*) in $iter:expr) => {
@@ -400,16 +396,12 @@ impl Eval for Spanned<&ExprFor> {
for ($($value),*) in $iter {
$(ctx.scopes.define($binding.as_str(), $value);)*
- let value = self.v.body.eval(ctx);
-
- if let Value::Template(prev) = &mut output {
- if let Value::Template(new) = value {
- prev.extend(new);
- }
+ if let Value::Template(new) = self.v.body.eval(ctx) {
+ output.extend(new);
}
}
- return output;
+ return Value::Template(output);
};
}