5. 来点错误
添加一个错误模块
src/main.rs
mod error;
src/error.rs
#[derive(Debug, thiserror::Error)]
pub enum RuntimeError {
#[error("IO: {0}")]
IO(#[from] std::io::Error),
#[error("Pointer overflow")]
PointerOverflow,
}
#[derive(Debug, thiserror::Error)]
pub enum VMError {
#[error("IO: {0}")]
IO(#[from] std::io::Error),
#[error("Compile: {0}")]
Compile(#[from] crate::bfir::CompileError),
#[error("Runtime: {0}")]
Runtime(#[from] RuntimeError),
}
pub type Result<T> = std::result::Result<T, VMError>;
虚拟机运行时可能出现两种错误,IO 错误和指针溢出。
虚拟机首先需要读取源代码,可能出现IO错误,然后将源代码编译为 IR,可能发生编译错误,最后运行程序,可能有运行时错误。