summaryrefslogtreecommitdiff
path: root/src/eval/template.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-07-30 18:04:08 +0200
committerLaurenz <laurmaedje@gmail.com>2021-07-30 18:49:19 +0200
commit1ee1d078e2480ddd08d40915bc7a74a8352acff0 (patch)
tree1e7ff367278a19fead3e404cf06d65bfb80a6cd9 /src/eval/template.rs
parent42a27b48df427edf8dbb624c51551a90ecf2e7ea (diff)
Fatal errors
- Makes errors fatal, so that a phase is only reached when all previous phases were error-free - Parsing still recovers and can produce multiple errors - Evaluation fails fast and can thus produce only a single error (except for parse errors due to an import) - The single error that could occur during execution is removed for now - Removes Value::Error variant
Diffstat (limited to 'src/eval/template.rs')
-rw-r--r--src/eval/template.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/eval/template.rs b/src/eval/template.rs
index 9a71ada4..29b5663d 100644
--- a/src/eval/template.rs
+++ b/src/eval/template.rs
@@ -21,9 +21,16 @@ impl Template {
}
/// Iterate over the contained template nodes.
- pub fn iter(&self) -> impl Iterator<Item = &TemplateNode> + '_ {
+ pub fn iter(&self) -> std::slice::Iter<TemplateNode> {
self.nodes.iter()
}
+
+ /// Repeat this template `n` times.
+ pub fn repeat(&self, n: usize) -> Self {
+ let len = self.nodes.len().checked_mul(n).expect("capacity overflow");
+ let nodes = self.iter().cloned().cycle().take(len).collect();
+ Self { nodes: Rc::new(nodes) }
+ }
}
impl From<TemplateTree> for Template {