git.delta.rocks / jrsonnet / refs/commits / 1979dbda1bc0

difftreelog

source

crates/jrsonnet-evaluator/src/function/parse.rs1.1 KiBsourcehistory
1use jrsonnet_ir::ExprParams;23use crate::{4	Context, ContextBuilder, Thunk,5	destructure::destruct,6	error::{ErrorKind::*, Result},7	evaluate_named_param,8};910/// Creates Context, which has all argument default values applied11/// and with unbound values causing error to be returned12pub fn parse_default_function_call(body_ctx: Context, params: &ExprParams) -> Result<Context> {13	let fctx = Context::new_future();1415	let mut ctx = ContextBuilder::extend(body_ctx);1617	for param in params.exprs.iter() {18		if let Some(v) = &param.default {19			destruct(20				&param.destruct.clone(),21				{22					let ctx = fctx.clone();23					let name = param.destruct.name();24					let value = v.clone();25					Thunk!(move || evaluate_named_param(ctx.unwrap(), &value, name))26				},27				fctx.clone(),28				&mut ctx,29			)?;30		} else {31			destruct(32				&param.destruct,33				{34					let param_name = param.destruct.name();35					let params = params.clone();36					Thunk!(move || Err(FunctionParameterNotBoundInCall(37						param_name,38						params.signature39					)40					.into()))41				},42				fctx.clone(),43				&mut ctx,44			)?;45		}46	}4748	Ok(ctx.build().into_future(fctx))49}