difftreelog
Merge pull request #100 from CertainLach/xor-builtin
in: master
3 files changed
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -86,6 +86,7 @@
("sign", builtin_sign::INST),
("max", builtin_max::INST),
("min", builtin_min::INST),
+ ("sum", builtin_sum::INST),
("modulo", builtin_modulo::INST),
("floor", builtin_floor::INST),
("ceil", builtin_ceil::INST),
@@ -105,6 +106,7 @@
("mod", builtin_mod::INST),
("primitiveEquals", builtin_primitive_equals::INST),
("equals", builtin_equals::INST),
+ ("xor", builtin_xor::INST),
("format", builtin_format::INST),
// Sort
("sort", builtin_sort::INST),
crates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/math.rs
+++ b/crates/jrsonnet-stdlib/src/math.rs
@@ -25,6 +25,11 @@
}
#[builtin]
+pub fn builtin_sum(arr: Vec<f64>) -> f64 {
+ arr.iter().sum()
+}
+
+#[builtin]
pub fn builtin_modulo(x: f64, y: f64) -> f64 {
x % y
}
crates/jrsonnet-stdlib/src/operator.rsdiffbeforeafterboth1//! Some jsonnet operations are desugared to stdlib functions...2//! However, in our case we instead implement them in native, and implement native functions on top of core for backwards compatibility34use jrsonnet_evaluator::{5 error::Result,6 function::builtin,7 operator::evaluate_mod_op,8 stdlib::std_format,9 typed::{Either, Either2},10 val::{equals, primitive_equals, StrValue},11 IStr, Val,12};1314#[builtin]15pub fn builtin_mod(a: Either![f64, IStr], b: Val) -> Result<Val> {16 use Either2::*;17 evaluate_mod_op(18 &match a {19 A(v) => Val::Num(v),20 B(s) => Val::Str(StrValue::Flat(s)),21 },22 &b,23 )24}2526#[builtin]27pub fn builtin_primitive_equals(x: Val, y: Val) -> Result<bool> {28 primitive_equals(&x, &y)29}3031#[builtin]32pub fn builtin_equals(a: Val, b: Val) -> Result<bool> {33 equals(&a, &b)34}3536#[builtin]37pub fn builtin_format(str: IStr, vals: Val) -> Result<String> {38 std_format(&str, vals)39}1//! Some jsonnet operations are desugared to stdlib functions...2//! However, in our case we instead implement them in native, and implement native functions on top of core for backwards compatibility34use jrsonnet_evaluator::{5 error::Result,6 function::builtin,7 operator::evaluate_mod_op,8 stdlib::std_format,9 typed::{Either, Either2},10 val::{equals, primitive_equals, StrValue},11 IStr, Val,12};1314#[builtin]15pub fn builtin_mod(a: Either![f64, IStr], b: Val) -> Result<Val> {16 use Either2::*;17 evaluate_mod_op(18 &match a {19 A(v) => Val::Num(v),20 B(s) => Val::Str(StrValue::Flat(s)),21 },22 &b,23 )24}2526#[builtin]27pub fn builtin_primitive_equals(x: Val, y: Val) -> Result<bool> {28 primitive_equals(&x, &y)29}3031#[builtin]32pub fn builtin_equals(a: Val, b: Val) -> Result<bool> {33 equals(&a, &b)34}3536#[builtin]37pub fn builtin_xor(x: bool, y: bool) -> bool {38 x ^ y39}4041#[builtin]42pub fn builtin_format(str: IStr, vals: Val) -> Result<String> {43 std_format(&str, vals)44}