diff --git a/ablescript/src/variables.rs b/ablescript/src/variables.rs index 66c3ffc..dbe6c28 100644 --- a/ablescript/src/variables.rs +++ b/ablescript/src/variables.rs @@ -635,7 +635,27 @@ impl ops::Sub for Value { ) .into_functio(), }, - Functio::Builtin(_) => todo!(), + Functio::Builtin(b) => { + let arity = b.arity; + let resulting_arity = arity.saturating_sub(rhs.into_i32() as usize); + + Functio::Builtin(BuiltinFunctio::new( + move |args| { + b.call( + &args + .iter() + .cloned() + .take(resulting_arity) + .chain(std::iter::repeat_with(|| { + Rc::new(RefCell::new(Value::Nul)) + })) + .take(arity) + .collect::>(), + ) + }, + resulting_arity, + )) + } Functio::Chain { functios, .. } => { let rhs = rhs.into_functio(); let (a, b) = *functios;