/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{}
}