git.delta.rocks / jrsonnet / refs/commits / 5fc1275a239d

difftreelog

source

crates/jrsonnet-evaluator/src/function/parse.rs1.2 KiBsourcehistory
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};1112/// Creates Context, which has all argument default values applied13/// and with unbound values causing error to be returned14pub 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) = &param.default {21			destruct(22				&param.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				&param.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}