diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-07-30 18:04:08 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-07-30 18:49:19 +0200 |
| commit | 1ee1d078e2480ddd08d40915bc7a74a8352acff0 (patch) | |
| tree | 1e7ff367278a19fead3e404cf06d65bfb80a6cd9 /src/eval/template.rs | |
| parent | 42a27b48df427edf8dbb624c51551a90ecf2e7ea (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.rs | 9 |
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 { |
