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
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
154 }154 }
155 value.1.clone()155 value.1.clone()
156 };156 };
157 let value = evaluate(&self.create_default_context()?, &expr)?;157 let value = evaluate(self.create_default_context()?, &expr)?;
158 {158 {
159 self.0159 self.0
160 .files160 .files
205 }205 }
206206
207 pub fn evaluate_raw(&self, code: LocExpr) -> Result<Val> {207 pub fn evaluate_raw(&self, code: LocExpr) -> Result<Val> {
208 self.run_in_state(|| evaluate(&self.create_default_context()?, &code))208 self.run_in_state(|| evaluate(self.create_default_context()?, &code))
209 }209 }
210210
211 pub fn add_global(&self, name: String, value: Val) {211 pub fn add_global(&self, name: String, value: Val) {
modifiedcrates/jsonnet-evaluator/src/val.rsdiffbeforeafterboth
179 .create_default_context()?179 .create_default_context()?
180 .with_var("__tmp__to_json__".to_owned(), self)?;180 .with_var("__tmp__to_json__".to_owned(), self)?;
181 if let Val::Str(result) = evaluate(181 if let Val::Str(result) = evaluate(
182 &ctx,182 ctx,
183 &el!(Expr::Apply(183 &el!(Expr::Apply(
184 el!(Expr::Index(184 el!(Expr::Index(
185 el!(Expr::Var("std".to_owned())),185 el!(Expr::Var("std".to_owned())),