summaryrefslogtreecommitdiff
path: root/src/eval/args.rs
diff options
context:
space:
mode:
authorMarmare314 <49279081+Marmare314@users.noreply.github.com>2023-04-13 16:07:58 +0200
committerGitHub <noreply@github.com>2023-04-13 16:07:58 +0200
commit0105eb7382801b56781308ea94b3aeffa6fd867f (patch)
tree9374989fb8999f4d1ca1362c8b96679cc61be9e0 /src/eval/args.rs
parentd1cd814ef8149cbac6e59c81e074aa59c930eed3 (diff)
Fix function sinks (#638)
Diffstat (limited to 'src/eval/args.rs')
-rw-r--r--src/eval/args.rs11
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