diff options
| author | Marmare314 <49279081+Marmare314@users.noreply.github.com> | 2023-04-13 16:07:58 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-13 16:07:58 +0200 |
| commit | 0105eb7382801b56781308ea94b3aeffa6fd867f (patch) | |
| tree | 9374989fb8999f4d1ca1362c8b96679cc61be9e0 /src/eval/args.rs | |
| parent | d1cd814ef8149cbac6e59c81e074aa59c930eed3 (diff) | |
Fix function sinks (#638)
Diffstat (limited to 'src/eval/args.rs')
| -rw-r--r-- | src/eval/args.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/eval/args.rs b/src/eval/args.rs index 129da463..66ca4a85 100644 --- a/src/eval/args.rs +++ b/src/eval/args.rs @@ -61,6 +61,17 @@ impl Args { Ok(None) } + /// Consume n positional arguments if possible. + pub fn consume(&mut self, n: usize) -> SourceResult<EcoVec<Arg>> { + if n > self.items.len() { + bail!(self.span, "not enough arguments"); + } + let vec = self.items.to_vec(); + let (left, right) = vec.split_at(n); + self.items = right.into(); + return Ok(left.into()); + } + /// Consume and cast the first positional argument. /// /// Returns a `missing argument: {what}` error if no positional argument is |
