git.delta.rocks / jrsonnet / refs/commits / 9d883c6db8a3

difftreelog

perf faster range

Лач2020-07-20parent: #aa3619c.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-evaluator/build.rsdiffbeforeafterboth
39 if **name == *"join" || **name == *"manifestJsonEx" ||39 if **name == *"join" || **name == *"manifestJsonEx" ||
40 **name == *"escapeStringJson" || **name == *"equals" ||40 **name == *"escapeStringJson" || **name == *"equals" ||
41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||
42 **name == *"sortImpl"42 **name == *"sortImpl" || **name == *"range"
43 )43 )
44 })44 })
45 .collect(),45 .collect(),
modifiedcrates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/evaluate.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate.rs
@@ -633,6 +633,17 @@
 				}
 				Ok(Val::Arr(Rc::new(new_arr)))
 			}))?,
+			// faster
+			("std", "range") => parse_args!(context, "std.range", args, 2, [
+				0, from: [Val::Num]!!Val::Num, vec![ValType::Num];
+				0, to: [Val::Num]!!Val::Num, vec![ValType::Num];
+			], {
+				let mut out = Vec::with_capacity((1+to as usize-from as usize).max(0));
+				for i in from as usize..=to as usize {
+					out.push(Val::Num(i as f64));
+				}
+				Val::Arr(Rc::new(out))
+			}),
 			("std", "char") => parse_args!(context, "std.char", args, 1, [
 				0, n: [Val::Num]!!Val::Num, vec![ValType::Num];
 			], {