difftreelog
feat C++ jsonnet compat methods
in: master
3 files changed
crates/jrsonnet-stdlib/src/compat.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-stdlib/src/compat.rs
@@ -0,0 +1,15 @@
+use std::cmp::Ordering;
+
+use jrsonnet_evaluator::{error::Result, function::builtin, operator::evaluate_compare_op, Val};
+
+#[builtin]
+#[allow(non_snake_case)]
+pub fn builtin___compare(v1: Val, v2: Val) -> Result<i32> {
+ Ok(
+ match evaluate_compare_op(&v1, &v2, jrsonnet_parser::BinaryOpType::Lt)? {
+ Ordering::Less => -1,
+ Ordering::Equal => 0,
+ Ordering::Greater => 1,
+ },
+ )
+}
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth150 // Sets150 // Sets151 ("setMember", builtin_set_member::INST),151 ("setMember", builtin_set_member::INST),152 ("setInter", builtin_set_inter::INST),152 ("setInter", builtin_set_inter::INST),153 // Compat154 ("__compare", builtin___compare::INST),153 ]155 ]154 .iter()156 .iter()155 .cloned()157 .cloned()crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -302,4 +302,13 @@
error 'find second parameter should be an array, got ' + std.type(arr)
else
std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),
+
+ // Compat
+ __compare_array(arr1, arr2):
+ assert std.isArray(arr1) && std.isArray(arr2);
+ std.__compare(arr1, arr2),
+ __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,
+ __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,
+ __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,
+ __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,
}