difftreelog
perf(evaluator) remove unnecessary cloning
in: master
4 files changed
crates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth211 let future_this = FutureObjValue::new();211 let future_this = FutureObjValue::new();212 let context_creator = context_creator!(212 let context_creator = context_creator!(213 closure!(clone context, clone new_bindings, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {213 closure!(clone context, clone new_bindings, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {214 Ok(context.clone().extend_unbound(214 Ok(context.extend_unbound(215 new_bindings.clone().unwrap(),215 new_bindings.clone().unwrap(),216 context.clone().dollar().clone().or_else(||this.clone()),216 context.dollar().clone().or_else(||this.clone()),217 Some(this.unwrap()),217 Some(this.unwrap()),218 super_obj218 super_obj219 )?)219 )?)318 let new_bindings = FutureNewBindings::new();318 let new_bindings = FutureNewBindings::new();319 let context_creator = context_creator!(319 let context_creator = context_creator!(320 closure!(clone context, clone new_bindings, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {320 closure!(clone context, clone new_bindings, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {321 Ok(context.clone().extend_unbound(321 Ok(context.extend_unbound(322 new_bindings.clone().unwrap(),322 new_bindings.clone().unwrap(),323 context.clone().dollar().clone().or_else(||this.clone()),323 context.dollar().clone().or_else(||this.clone()),324 None,324 None,325 super_obj325 super_obj326 )?)326 )?)664 ("std", "filter") => {664 ("std", "filter") => {665 assert_eq!(args.len(), 2);665 assert_eq!(args.len(), 2);666 if let (Val::Func(predicate), Val::Arr(arr)) = (666 if let (Val::Func(predicate), Val::Arr(arr)) = (667 evaluate(context, &args[0].1)?,667 evaluate(context.clone(), &args[0].1)?,668 evaluate(context, &args[1].1)?,668 evaluate(context.clone(), &args[1].1)?,669 ) {669 ) {670 Val::Arr(670 Val::Arr(671 arr.into_iter()671 arr.into_iter()672 .filter(|e| {672 .filter(|e| {673 predicate673 predicate674 .evaluate_values(&context, &[e.clone()])674 .evaluate_values(context.clone(), &[e.clone()])675 .unwrap()675 .unwrap()676 .try_cast_bool("filter predicate")676 .try_cast_bool("filter predicate")677 .unwrap()677 .unwrap()685 // faster685 // faster686 ("std", "join") => {686 ("std", "join") => {687 assert_eq!(args.len(), 2);687 assert_eq!(args.len(), 2);688 let joiner = evaluate(context, &args[0].1)?.unwrap_if_lazy()?;688 let joiner = evaluate(context.clone(), &args[0].1)?.unwrap_if_lazy()?;689 let items = evaluate(context, &args[1].1)?.unwrap_if_lazy()?;689 let items = evaluate(context, &args[1].1)?.unwrap_if_lazy()?;690 println!("Before");690 println!("Before");691 let result = match (joiner, items) {691 let result = match (joiner, items) {775 cond_then,775 cond_then,776 cond_else,776 cond_else,777 } => {777 } => {778 if evaluate(context, &cond.0)?.try_cast_bool("if condition should be boolean")? {778 if evaluate(context.clone(), &cond.0)?779 .try_cast_bool("if condition should be boolean")?780 {779 evaluate(context, cond_then)?781 evaluate(context, cond_then)?crates/jsonnet-evaluator/src/function.rsdiffbeforeafterboth--- 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)))
};
crates/jsonnet-evaluator/src/lib.rsdiffbeforeafterboth--- 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<Val> {
- 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) {
crates/jsonnet-evaluator/src/val.rsdiffbeforeafterboth--- 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())),