difftreelog
feat std.{mantissa,exponent} builtins
in: master
2 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth97 ("acos".into(), builtin_acos),97 ("acos".into(), builtin_acos),98 ("atan".into(), builtin_atan),98 ("atan".into(), builtin_atan),99 ("exp".into(), builtin_exp),99 ("exp".into(), builtin_exp),100 ("mantissa".into(), builtin_mantissa),101 ("exponent".into(), builtin_exponent),100 ("extVar".into(), builtin_ext_var),102 ("extVar".into(), builtin_ext_var),101 ("native".into(), builtin_native),103 ("native".into(), builtin_native),102 ("filter".into(), builtin_filter),104 ("filter".into(), builtin_filter),376 })378 })377}379}380381fn frexp(s: f64) -> (f64, i16) {382 if 0.0 == s {383 return (s, 0);384 } else {385 let lg = s.abs().log2();386 let x = (lg - lg.floor() - 1.0).exp2();387 let exp = lg.floor() + 1.0;388 (s.signum() * x, exp as i16)389 }390}391392fn builtin_mantissa(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {393 parse_args!(context, "mantissa", args, 1, [394 0, x: ty!(number) => Val::Num;395 ], {396 Ok(Val::Num(frexp(x).0))397 })398}399400fn builtin_exponent(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {401 parse_args!(context, "exponent", args, 1, [402 0, x: ty!(number) => Val::Num;403 ], {404 Ok(Val::Num(frexp(x).1.into()))405 })406}378407379fn builtin_ext_var(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {408fn builtin_ext_var(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {380 parse_args!(context, "extVar", args, 1, [409 parse_args!(context, "extVar", args, 1, [crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth35 atan:: $intrinsic(atan),35 atan:: $intrinsic(atan),363637 exp:: $intrinsic(exp),37 exp:: $intrinsic(exp),38 mantissa:: $intrinsic(mantissa),39 exponent:: $intrinsic(exponent),384039 isString(v):: std.type(v) == 'string',41 isString(v):: std.type(v) == 'string',40 isNumber(v):: std.type(v) == 'number',42 isNumber(v):: std.type(v) == 'number',