Skip to main content

rl_lang/interpreter/stdlib/debug/
panic.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn func(eval: &mut Evaluator, args: Vec<Value>, span: Span) -> Result<Value, Error> {
7    if args.len() > 1 {
8        return Err(eval.err(
9            format!("panic: expects 0 or 1 arguments, got {}", args.len()),
10            span,
11        ));
12    }
13    let message = match args.into_iter().next() {
14        Some(Value::String(s)) => s,
15        Some(other) => {
16            return Err(eval.err(
17                format!("panic: expects a string message, got {}", other.type_name()),
18                span,
19            ));
20        }
21        None => "explicit panic".to_string(),
22    };
23    Err(eval.err(message, span))
24}