difftreelog
fix prepare with extra named arguments
in: master
2 files changed
crates/jrsonnet-evaluator/src/evaluate/mod.rsdiffbeforeafterboth431 Ok(match value {431 Ok(match value {432 Val::Func(f) => {432 Val::Func(f) => {433 let name = f.name();433 let name = f.name();434 let prepare = PreparedFuncVal::new(f, args.unnamed.len(), &args.names)?;435 let unnamed = args434 let unnamed = args436 .unnamed435 .unnamed437 .iter()436 .iter()444 .cloned()443 .cloned()445 .map(|un| evaluate_thunk(ctx.clone(), un, tailstrict))444 .map(|un| evaluate_thunk(ctx.clone(), un, tailstrict))446 .collect::<Result<Vec<_>>>()?;445 .collect::<Result<Vec<_>>>()?;446 let prepare = PreparedFuncVal::new(f, args.unnamed.len(), &args.names)447 .with_description_src(loc, || format!("function <{name}> call"))?;447 let body = || prepare.call(loc, &unnamed, &named);448 let body = || prepare.call(loc, &unnamed, &named);448 if tailstrict {449 if tailstrict {449 body()?450 body()?crates/jrsonnet-evaluator/src/function/prepared.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/prepared.rs
+++ b/crates/jrsonnet-evaluator/src/function/prepared.rs
@@ -51,7 +51,7 @@
bail!(TooManyArgsFunctionHas(params.len(), params))
}
- let expected_defaults = params.len() - unnamed - named.len();
+ let expected_defaults = (params.len() - unnamed).saturating_sub(named.len());
let mut ops = PreparedCall {
named: Vec::with_capacity(named.len()),
defaults: Vec::with_capacity(expected_defaults),