rl_lang/interpreter/stdlib/debug/
unreachable.rs1use 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}