2024-12-10 03:34:41 -05:00
|
|
|
use std::panic;
|
2024-12-10 01:34:53 -05:00
|
|
|
|
|
|
|
use smallvec::SmallVec;
|
|
|
|
|
2024-12-14 08:49:02 -05:00
|
|
|
use crate::{DustString, NativeFunctionError, Value, Vm};
|
2024-12-10 01:34:53 -05:00
|
|
|
|
|
|
|
pub fn panic(
|
|
|
|
vm: &Vm,
|
2024-12-14 08:49:02 -05:00
|
|
|
arguments: SmallVec<[&Value; 4]>,
|
2024-12-10 01:34:53 -05:00
|
|
|
) -> Result<Option<Value>, NativeFunctionError> {
|
2024-12-10 03:34:41 -05:00
|
|
|
let mut message: Option<DustString> = None;
|
2024-12-10 01:34:53 -05:00
|
|
|
|
|
|
|
for value_ref in arguments {
|
2024-12-14 16:17:02 -05:00
|
|
|
let string = value_ref.display(vm);
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2024-12-10 03:34:41 -05:00
|
|
|
match message {
|
|
|
|
Some(ref mut message) => message.push_str(&string),
|
|
|
|
None => message = Some(string),
|
|
|
|
}
|
2024-12-10 01:34:53 -05:00
|
|
|
}
|
|
|
|
|
2024-12-14 16:17:02 -05:00
|
|
|
if let Some(message) = message {
|
|
|
|
panic!("{message}");
|
|
|
|
} else {
|
|
|
|
panic!("Explicit panic");
|
|
|
|
}
|
2024-12-10 01:34:53 -05:00
|
|
|
}
|