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

difftreelog

perf faster foldl, foldr

Лач2020-07-19parent: #36ab91f.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-evaluator/build.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/build.rs
+++ b/crates/jrsonnet-evaluator/build.rs
@@ -35,7 +35,10 @@
 								Member::Field(FieldMember {
 									name: FieldName::Fixed(name),
 									..
-								}) if **name == *"join" || **name == *"manifestJsonEx" || **name == *"escapeStringJson" || **name == *"equals" || **name == *"base64"
+								})
+								if **name == *"join" || **name == *"manifestJsonEx" ||
+								**name == *"escapeStringJson" || **name == *"equals" ||
+								**name == *"base64" || **name == *"foldl" || **name == *"foldr"
 							)
 						})
 						.collect(),
modifiedcrates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
557 .collect(),557 .collect(),
558 )))558 )))
559 }))?,559 }))?,
560 // faster
561 ("std", "foldl") => noinline!(parse_args!(context, "std.foldl", args, 3, [
562 0, func: [Val::Func]!!Val::Func, vec![ValType::Func];
563 1, arr: [Val::Arr]!!Val::Arr, vec![ValType::Arr];
564 2, init, vec![];
565 ], {
566 let mut acc = init;
567 for i in arr.iter().cloned() {
568 acc = func.evaluate_values(context.clone(), &[acc, i])?;
569 }
570 Ok(acc)
571 }))?,
572 // faster
573 ("std", "foldr") => noinline!(parse_args!(context, "std.foldr", args, 3, [
574 0, func: [Val::Func]!!Val::Func, vec![ValType::Func];
575 1, arr: [Val::Arr]!!Val::Arr, vec![ValType::Arr];
576 2, init, vec![];
577 ], {
578 let mut acc = init;
579 for i in arr.iter().rev().cloned() {
580 acc = func.evaluate_values(context.clone(), &[acc, i])?;
581 }
582 Ok(acc)
583 }))?,
560 ("std", "char") => parse_args!(context, "std.char", args, 1, [584 ("std", "char") => parse_args!(context, "std.char", args, 1, [
561 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];585 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];
562 ], {586 ], {