git.delta.rocks / jrsonnet / refs/commits / eff1bc234bfb

difftreelog

perf(evaluator) remove unnecessary cloning

Лач2020-06-25parent: #ce9e7d9.patch.diff
in: master

4 files changed

modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
211 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_obj
219 )?)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_obj
326 )?)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 predicate
674 .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 // faster
686 ("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)?
modifiedcrates/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)))
 		};
modifiedcrates/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) {
modifiedcrates/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())),