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
--- 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<ObjValue>, super_obj: Option<ObjValue>| {
-					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<ObjValue>, super_obj: Option<ObjValue>| {
-							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 {
modifiedcrates/jsonnet-evaluator/src/function.rsdiffbeforeafterboth
69 unreachable!()69 unreachable!()
70 };70 };
71 let val = if tailstrict {71 let val = if tailstrict {
72 resolved_lazy_val!(evaluate(ctx.clone(), expr)?)72 resolved_lazy_val!(evaluate(ctx, expr)?)
73 } else {73 } else {
74 lazy_val!(closure!(clone ctx, clone expr, ||evaluate(ctx.clone(), &expr)))74 lazy_val!(closure!(clone ctx, clone expr, ||evaluate(ctx.clone(), &expr)))
75 };75 };
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())),