git.delta.rocks / jrsonnet / refs/commits / 9440ce0bbfa7

difftreelog

feat C++ jsonnet compat methods

Yaroslav Bolyukin2023-04-08parent: #9af1f59.patch.diff
in: master

3 files changed

addedcrates/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,
+		},
+	)
+}
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -150,6 +150,8 @@
 		// Sets
 		("setMember", builtin_set_member::INST),
 		("setInter", builtin_set_inter::INST),
+		// Compat
+		("__compare", builtin___compare::INST),
 	]
 	.iter()
 	.cloned()
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
302 error 'find second parameter should be an array, got ' + std.type(arr)302 error 'find second parameter should be an array, got ' + std.type(arr)
303 else303 else
304 std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),304 std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),
305
306 // Compat
307 __compare_array(arr1, arr2):
308 assert std.isArray(arr1) && std.isArray(arr2);
309 std.__compare(arr1, arr2),
310 __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,
311 __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,
312 __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,
313 __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,
305}314}
306315