1use jrsonnet_ir::ExprParams;2use rustc_hash::FxHashMap;34use crate::{5 Context, Thunk,6 destructure::destruct,7 error::{ErrorKind::*, Result},8 evaluate_named_param,9 gc::WithCapacityExt as _,10};11121314pub fn parse_default_function_call(body_ctx: Context, params: &ExprParams) -> Result<Context> {15 let fctx = Context::new_future();1617 let mut bindings = FxHashMap::with_capacity(params.binds_len());1819 for param in params.exprs.iter() {20 if let Some(v) = ¶m.default {21 destruct(22 ¶m.destruct.clone(),23 {24 let ctx = fctx.clone();25 let name = param.destruct.name();26 let value = v.clone();27 Thunk!(move || evaluate_named_param(ctx.unwrap(), &value, name))28 },29 fctx.clone(),30 &mut bindings,31 )?;32 } else {33 destruct(34 ¶m.destruct,35 {36 let param_name = param.destruct.name();37 let params = params.clone();38 Thunk!(move || Err(FunctionParameterNotBoundInCall(39 param_name,40 params.signature41 )42 .into()))43 },44 fctx.clone(),45 &mut bindings,46 )?;47 }48 }4950 Ok(body_ctx.extend_bindings(bindings).into_future(fctx))51}