summaryrefslogtreecommitdiff
path: root/src/eval/mod.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/mod.rs
parentd1cd814ef8149cbac6e59c81e074aa59c930eed3 (diff)
Fix function sinks (#638)
Diffstat (limited to 'src/eval/mod.rs')
-rw-r--r--src/eval/mod.rs16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs
index 5a450481..1b3c6ea3 100644
--- a/src/eval/mod.rs
+++ b/src/eval/mod.rs
@@ -1149,24 +1149,17 @@ impl Eval for ast::Closure {
visitor.finish()
};
- let mut params = Vec::new();
- let mut sink = None;
-
// Collect parameters and an optional sink parameter.
+ let mut params = Vec::new();
for param in self.params().children() {
match param {
ast::Param::Pos(name) => {
- params.push((name, None));
+ params.push(Param::Pos(name));
}
ast::Param::Named(named) => {
- params.push((named.name(), Some(named.expr().eval(vm)?)));
- }
- ast::Param::Sink(name) => {
- if sink.is_some() {
- bail!(name.span(), "only one argument sink is allowed");
- }
- sink = Some(name);
+ params.push(Param::Named(named.name(), named.expr().eval(vm)?));
}
+ ast::Param::Sink(name) => params.push(Param::Sink(name)),
}
}
@@ -1176,7 +1169,6 @@ impl Eval for ast::Closure {
name,
captured,
params,
- sink,
body: self.body(),
};