diff --git a/src/twopass.rs b/src/twopass.rs index 846c66b..5acd9c2 100644 --- a/src/twopass.rs +++ b/src/twopass.rs @@ -324,7 +324,15 @@ impl Eval for Call { impl Eval for Function { fn eval(&self, ctx: &RunContext) -> types::Value { - todo!() + let upvalues: Vec<_> = self + .upvalues + .iter() + .map(|(_name, id)| ctx.var(*id)) + .collect(); + let self_ = self.clone(); // TODO reference, somehow + Some( + types::Function::new(self.name.clone(), move |args| self_.call(&upvalues, args)).into(), + ) } }