difftreelog
perf move C++ compat to native
in: master
3 files changed
crates/jrsonnet-stdlib/src/compat.rsdiffbeforeafterboth1use std::cmp::Ordering;1use std::cmp::Ordering;223use 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};465#[builtin]7#[builtin]14 )16 )15}17}1819#[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}2425macro_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);1649crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth219 ("regexQuoteMeta", builtin_regex_quote_meta::INST),219 ("regexQuoteMeta", builtin_regex_quote_meta::INST),220 // Compat220 // Compat221 ("__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()crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth89 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 else91 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)),9293 // Compat94 __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