summaryrefslogtreecommitdiff
path: root/src/eval/template.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval/template.rs')
-rw-r--r--src/eval/template.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/eval/template.rs b/src/eval/template.rs
index 1f1544e6..465e9195 100644
--- a/src/eval/template.rs
+++ b/src/eval/template.rs
@@ -403,9 +403,16 @@ impl<'a> Builder<'a> {
}
}
Template::Show(node) => {
+ let id = node.id();
+ if vm.rules.contains(&id) {
+ let span = styles.recipe_span(id).unwrap();
+ return Err("show rule is recursive").at(span)?;
+ }
+ vm.rules.push(id);
let template = node.show(vm, styles)?;
let stored = self.tpa.alloc(template);
- self.process(vm, stored, styles.unscoped(node.id()))?;
+ self.process(vm, stored, styles.unscoped(id))?;
+ vm.rules.pop();
}
Template::Styled(styled) => {
let (sub, map) = styled.as_ref();
@@ -455,8 +462,8 @@ impl<'a> Builder<'a> {
};
let template = match kind {
- UNORDERED => Template::show(ListNode::<UNORDERED> { items, wide, start: 1 }),
- ORDERED | _ => Template::show(ListNode::<ORDERED> { items, wide, start: 1 }),
+ UNORDERED => Template::show(ListNode::<UNORDERED> { start: 1, wide, items }),
+ ORDERED | _ => Template::show(ListNode::<ORDERED> { start: 1, wide, items }),
};
let stored = self.tpa.alloc(template);