diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-02-18 15:02:02 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-02-18 16:57:53 +0100 |
| commit | e01970b20a058ab1b4ebea916f229c9b706c84e4 (patch) | |
| tree | 5c5efc75abd6e607bd45a0602603231edf520503 /src/eval/template.rs | |
| parent | 05ec0f993b4a1b8481e494ee16285d23f000872f (diff) | |
Basic show rules
Diffstat (limited to 'src/eval/template.rs')
| -rw-r--r-- | src/eval/template.rs | 13 |
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); |
