2024-12-17 07:10:47 -05:00
|
|
|
use std::{ops::Range, panic};
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2025-01-08 23:02:08 -05:00
|
|
|
use crate::vm::ThreadData;
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2025-01-08 23:02:08 -05:00
|
|
|
pub fn panic(data: &mut ThreadData, _: Option<u8>, argument_range: Range<u8>) -> bool {
|
2025-01-09 01:44:07 -05:00
|
|
|
let record = &mut data.call_stack.last_mut_unchecked().record;
|
2024-12-17 07:10:47 -05:00
|
|
|
let position = record.current_position();
|
|
|
|
let mut message = format!("Dust panic at {position}!");
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2024-12-17 07:10:47 -05:00
|
|
|
for register_index in argument_range {
|
2025-01-08 10:29:53 -05:00
|
|
|
let value = record.open_register_unchecked(register_index);
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2024-12-17 07:10:47 -05:00
|
|
|
if let Some(string) = value.as_string() {
|
2024-12-17 16:31:32 -05:00
|
|
|
message.push_str(string);
|
2024-12-17 07:10:47 -05:00
|
|
|
message.push('\n');
|
2024-12-10 03:34:41 -05:00
|
|
|
}
|
2024-12-10 01:34:53 -05:00
|
|
|
}
|
|
|
|
|
2024-12-17 07:10:47 -05:00
|
|
|
panic!("{}", message)
|
2024-12-10 01:34:53 -05:00
|
|
|
}
|