--- a/crates/jsonnet-evaluator/src/evaluate.rs +++ b/crates/jsonnet-evaluator/src/evaluate.rs @@ -211,9 +211,9 @@ let future_this = FutureObjValue::new(); let context_creator = context_creator!( closure!(clone context, clone new_bindings, |this: Option, super_obj: Option| { - Ok(context.clone().extend_unbound( + Ok(context.extend_unbound( new_bindings.clone().unwrap(), - context.clone().dollar().clone().or_else(||this.clone()), + context.dollar().clone().or_else(||this.clone()), Some(this.unwrap()), super_obj )?) @@ -318,9 +318,9 @@ let new_bindings = FutureNewBindings::new(); let context_creator = context_creator!( closure!(clone context, clone new_bindings, |this: Option, super_obj: Option| { - Ok(context.clone().extend_unbound( + Ok(context.extend_unbound( new_bindings.clone().unwrap(), - context.clone().dollar().clone().or_else(||this.clone()), + context.dollar().clone().or_else(||this.clone()), None, super_obj )?) @@ -664,14 +664,14 @@ ("std", "filter") => { assert_eq!(args.len(), 2); if let (Val::Func(predicate), Val::Arr(arr)) = ( - evaluate(context, &args[0].1)?, - evaluate(context, &args[1].1)?, + evaluate(context.clone(), &args[0].1)?, + evaluate(context.clone(), &args[1].1)?, ) { Val::Arr( arr.into_iter() .filter(|e| { predicate - .evaluate_values(&context, &[e.clone()]) + .evaluate_values(context.clone(), &[e.clone()]) .unwrap() .try_cast_bool("filter predicate") .unwrap() @@ -685,7 +685,7 @@ // faster ("std", "join") => { assert_eq!(args.len(), 2); - let joiner = evaluate(context, &args[0].1)?.unwrap_if_lazy()?; + let joiner = evaluate(context.clone(), &args[0].1)?.unwrap_if_lazy()?; let items = evaluate(context, &args[1].1)?.unwrap_if_lazy()?; println!("Before"); let result = match (joiner, items) { @@ -775,7 +775,9 @@ cond_then, cond_else, } => { - if evaluate(context, &cond.0)?.try_cast_bool("if condition should be boolean")? { + if evaluate(context.clone(), &cond.0)? + .try_cast_bool("if condition should be boolean")? + { evaluate(context, cond_then)? } else { match cond_else { --- a/crates/jsonnet-evaluator/src/function.rs +++ b/crates/jsonnet-evaluator/src/function.rs @@ -69,7 +69,7 @@ unreachable!() }; let val = if tailstrict { - resolved_lazy_val!(evaluate(ctx.clone(), expr)?) + resolved_lazy_val!(evaluate(ctx, expr)?) } else { lazy_val!(closure!(clone ctx, clone expr, ||evaluate(ctx.clone(), &expr))) }; --- a/crates/jsonnet-evaluator/src/lib.rs +++ b/crates/jsonnet-evaluator/src/lib.rs @@ -154,7 +154,7 @@ } value.1.clone() }; - let value = evaluate(&self.create_default_context()?, &expr)?; + let value = evaluate(self.create_default_context()?, &expr)?; { self.0 .files @@ -205,7 +205,7 @@ } pub fn evaluate_raw(&self, code: LocExpr) -> Result { - self.run_in_state(|| evaluate(&self.create_default_context()?, &code)) + self.run_in_state(|| evaluate(self.create_default_context()?, &code)) } pub fn add_global(&self, name: String, value: Val) { --- a/crates/jsonnet-evaluator/src/val.rs +++ b/crates/jsonnet-evaluator/src/val.rs @@ -179,7 +179,7 @@ .create_default_context()? .with_var("__tmp__to_json__".to_owned(), self)?; if let Val::Str(result) = evaluate( - &ctx, + ctx, &el!(Expr::Apply( el!(Expr::Index( el!(Expr::Var("std".to_owned())),