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

difftreelog

perf move C++ compat to native

Yaroslav Bolyukin2024-05-19parent: #cb937ae.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-stdlib/src/compat.rsdiffbeforeafterboth
1use std::cmp::Ordering;1use std::cmp::Ordering;
22
3use jrsonnet_evaluator::{function::builtin, operator::evaluate_compare_op, Result, Val};3use jrsonnet_evaluator::{
4 function::builtin, operator::evaluate_compare_op, val::ArrValue, Result, Val,
5};
46
5#[builtin]7#[builtin]
14 )16 )
15}17}
18
19#[builtin]
20#[allow(non_snake_case)]
21pub fn builtin___compare_array(arr1: ArrValue, arr2: ArrValue) -> Result<i32> {
22 builtin___compare(Val::Arr(arr1), Val::Arr(arr2))
23}
24
25macro_rules! arr_comp {
26 ($name:ident, $operator:expr) => {
27 #[builtin]
28 #[allow(non_snake_case)]
29 pub fn $name(arr1: ArrValue, arr2: ArrValue) -> Result<bool> {
30 let ordering = evaluate_compare_op(
31 &Val::Arr(arr1),
32 &Val::Arr(arr2),
33 jrsonnet_parser::BinaryOpType::Lt,
34 )?;
35 Ok($operator.contains(&ordering))
36 }
37 };
38}
39arr_comp!(builtin___array_less, [Ordering::Less]);
40arr_comp!(builtin___array_greater, [Ordering::Greater]);
41arr_comp!(
42 builtin___array_less_or_equal,
43 [Ordering::Less, Ordering::Equal]
44);
45arr_comp!(
46 builtin___array_greater_or_equal,
47 [Ordering::Greater, Ordering::Equal]
48);
1649
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
219 ("regexQuoteMeta", builtin_regex_quote_meta::INST),219 ("regexQuoteMeta", builtin_regex_quote_meta::INST),
220 // Compat220 // Compat
221 ("__compare", builtin___compare::INST),221 ("__compare", builtin___compare::INST),
222 ("__compare_array", builtin___compare_array::INST),
223 ("__array_less", builtin___array_less::INST),
224 ("__array_greater", builtin___array_greater::INST),
225 ("__array_less_or_equal", builtin___array_less_or_equal::INST),
226 (
227 "__array_greater_or_equal",
228 builtin___array_greater_or_equal::INST,
229 ),
222 ]230 ]
223 .iter()231 .iter()
224 .copied()232 .copied()
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
89 error 'find second parameter should be an array, got ' + std.type(arr)89 error 'find second parameter should be an array, got ' + std.type(arr)
90 else90 else
91 std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),91 std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),
92
93 // Compat
94 __compare_array(arr1, arr2)::
95 assert std.isArray(arr1) && std.isArray(arr2);
96 std.__compare(arr1, arr2),
97 __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,
98 __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,
99 __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,
100 __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,
101}92}
10293