2024-12-17 07:10:47 -05:00
|
|
|
use std::{ops::Range, panic};
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2025-02-16 22:55:55 -05:00
|
|
|
use crate::vm::{RuntimeValue, Thread};
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2025-02-03 17:49:38 -05:00
|
|
|
pub fn panic(data: &mut Thread, _: usize, argument_range: Range<usize>) {
|
2025-02-16 22:55:55 -05:00
|
|
|
let current_frame = data.current_frame();
|
2025-01-09 05:31:45 -05:00
|
|
|
let position = data.current_position();
|
2024-12-17 07:10:47 -05:00
|
|
|
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-02-16 22:55:55 -05:00
|
|
|
let string_value = current_frame.get_string_from_register(register_index);
|
|
|
|
|
|
|
|
match string_value {
|
|
|
|
RuntimeValue::Raw(value) => {
|
|
|
|
message.push_str(value.as_str());
|
|
|
|
}
|
|
|
|
RuntimeValue::Rc(rc) => {
|
|
|
|
message.push_str(rc.as_str());
|
|
|
|
}
|
|
|
|
RuntimeValue::RefCell(ref_cell) => {
|
|
|
|
message.push_str(ref_cell.borrow().as_str());
|
|
|
|
}
|
|
|
|
}
|
2024-12-10 01:34:53 -05:00
|
|
|
|
2025-01-09 05:31:45 -05:00
|
|
|
message.push('\n');
|
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
|
|
|
}
|