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
before · crates/jrsonnet-stdlib/src/compat.rs
1use std::cmp::Ordering;23use jrsonnet_evaluator::{function::builtin, operator::evaluate_compare_op, Result, Val};45#[builtin]6#[allow(non_snake_case)]7pub fn builtin___compare(v1: Val, v2: Val) -> Result<i32> {8	Ok(9		match evaluate_compare_op(&v1, &v2, jrsonnet_parser::BinaryOpType::Lt)? {10			Ordering::Less => -1,11			Ordering::Equal => 0,12			Ordering::Greater => 1,13		},14	)15}
after · crates/jrsonnet-stdlib/src/compat.rs
1use std::cmp::Ordering;23use jrsonnet_evaluator::{4	function::builtin, operator::evaluate_compare_op, val::ArrValue, Result, Val,5};67#[builtin]8#[allow(non_snake_case)]9pub fn builtin___compare(v1: Val, v2: Val) -> Result<i32> {10	Ok(11		match evaluate_compare_op(&v1, &v2, jrsonnet_parser::BinaryOpType::Lt)? {12			Ordering::Less => -1,13			Ordering::Equal => 0,14			Ordering::Greater => 1,15		},16	)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);
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -219,6 +219,14 @@
 		("regexQuoteMeta", builtin_regex_quote_meta::INST),
 		// Compat
 		("__compare", builtin___compare::INST),
+		("__compare_array", builtin___compare_array::INST),
+		("__array_less", builtin___array_less::INST),
+		("__array_greater", builtin___array_greater::INST),
+		("__array_less_or_equal", builtin___array_less_or_equal::INST),
+		(
+			"__array_greater_or_equal",
+			builtin___array_greater_or_equal::INST,
+		),
 	]
 	.iter()
 	.copied()
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -89,13 +89,4 @@
       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,
 }