rl_lang/interpreter/stdlib/bitwise/
leading_zeros.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_leading_zeros(
7 eval: &mut Evaluator,
8 args: Vec<Value>,
9 span: Span,
10) -> Result<Value, Error> {
11 if args.len() != 1 {
12 return Err(eval.err(
13 format!("leading_zeros() expects 1 argument, got {}", args.len()),
14 span,
15 ));
16 }
17
18 match args.into_iter().next().unwrap_or(Value::Null) {
19 Value::Byte(x) => Ok(Value::Byte(u8::leading_zeros(x) as u8)),
20 Value::Integer(x) => Ok(Value::Integer(i64::leading_zeros(x) as i64)),
21 _ => Err(eval.err("leading_zeros() expects a byte or an int".to_string(), span)),
22 }
23}