From 9d883c6db8a30ddd2928890bf2011ed4eb738b4f Mon Sep 17 00:00:00 2001 From: Лач Date: Mon, 20 Jul 2020 23:39:18 +0000 Subject: [PATCH] perf: faster range --- --- a/crates/jrsonnet-evaluator/build.rs +++ b/crates/jrsonnet-evaluator/build.rs @@ -39,7 +39,7 @@ if **name == *"join" || **name == *"manifestJsonEx" || **name == *"escapeStringJson" || **name == *"equals" || **name == *"base64" || **name == *"foldl" || **name == *"foldr" || - **name == *"sortImpl" + **name == *"sortImpl" || **name == *"range" ) }) .collect(), --- 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]; ], { -- gitstuff