Skip to main content

rl_lang/interpreter/stdlib/debug/
unreachable.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!("unreachable: expects 0 or 1 arguments, got {}", args.len()),
10            span,
11        ));
12    }
13
14    let message = match args.into_iter().next() {
15        Some(Value::String(s)) => format!("internal error: entered unreachable code: {}", s),
16        Some(other) => {
17            return Err(eval.err(
18                format!(
19                    "unreachable: expects a string message, got {}",
20                    other.type_name()
21                ),
22                span,
23            ));
24        }
25        None => "internal error: entered unreachable code".to_string(),
26    };
27
28    Err(eval.err(message, span))
29}