pd-vm 0.22.5

RustScript bytecode compiler and VM
Documentation
use super::{Vm, VmError};

pub fn render_vm_error(vm: &Vm, err: &VmError) -> String {
    let mut out = format!("runtime error: {err}");
    let ip = vm.ip();
    if let Some(debug) = vm.debug_info()
        && let Some(line) = debug.line_for_offset(ip)
    {
        out.push_str(&format!("\nat ip {ip} (line {line})"));
        if let Some(source) = debug.source.as_ref()
            && let Some(line_text) = source
                .lines()
                .nth(line.saturating_sub(1) as usize)
                .map(str::to_string)
        {
            out.push_str(&format!("\n{line:>3} | {line_text}\n  | ^"));
        }
    } else {
        out.push_str(&format!("\nat ip {ip}"));
    }
    out
}