/src/panic.rs
extern crate alloc;
use core::panic::PanicInfo;
use core::fmt;
use crate::console::get_global_console;
use crate::util::print_dec;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
// Boy if we panic before the console is up, we're just SOL.
let mut console = get_global_console();
console.write("PANIC!\n");
if let Some(p) = info.payload().downcast_ref::<&str>() {
console.write(p);
} else if let Some(m) = info.message() {
match fmt::write(&mut console, *m) {
Ok(_) => (),
Err(_) => console.write("Error formatting panic message"),
};
} else {
console.write("no payload");
}
console.write("\n");
if let Some(location) = info.location() {
console.write("at ");
console.write(location.file());
console.write(" line ");
print_dec(location.line());
console.write(":");
print_dec(location.column());
console.write("\n");
} else {
console.write("Unknown location\n");
}
loop{}
}