summaryrefslogtreecommitdiff
path: root/src/model/eval.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-30 19:40:29 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-30 20:00:50 +0100
commita6d90c1bf1e9fefa0af04206909a40e112d6bb14 (patch)
treefc16276142f74b9a50102a2e855942f7e2593c25 /src/model/eval.rs
parentf70cea508cd30fa40770ea989fe2a19e715a357b (diff)
Numbering functions
Diffstat (limited to 'src/model/eval.rs')
-rw-r--r--src/model/eval.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/model/eval.rs b/src/model/eval.rs
index ab89f9c2..e9134114 100644
--- a/src/model/eval.rs
+++ b/src/model/eval.rs
@@ -563,7 +563,11 @@ impl Eval for ast::Ident {
type Output = Value;
fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> {
- vm.scopes.get(self).cloned().at(self.span())
+ let value = vm.scopes.get(self).cloned().at(self.span())?;
+ Ok(match value {
+ Value::Func(func) => Value::Func(func.spanned(self.span())),
+ value => value,
+ })
}
}
@@ -912,15 +916,17 @@ impl Eval for ast::Closure {
}
}
- // Define the actual function.
- Ok(Value::Func(Func::from_closure(Closure {
+ // Define the closure function.
+ let closure = Closure {
location: vm.location,
name,
captured,
params,
sink,
body: self.body(),
- })))
+ };
+
+ Ok(Value::Func(Func::from_closure(closure, self.span())))
}
}