mf_expression/vm/error.rs
1//! 虚拟机错误类型定义
2//!
3//! 定义了虚拟机执行过程中可能遇到的各种错误类型
4
5use thiserror::Error;
6
7/// 虚拟机错误枚举
8///
9/// 包含虚拟机运行时可能出现的所有错误类型
10#[derive(Debug, PartialEq, Eq, Clone, Error)]
11pub enum VMError {
12 /// 操作码执行错误
13 ///
14 /// 当特定操作码执行失败时产生,包含操作码名称和错误信息
15 #[error("操作码 {opcode}: {message}")]
16 OpcodeErr {
17 /// 操作码名称
18 opcode: String,
19 /// 错误信息
20 message: String,
21 },
22
23 /// 操作码索引越界错误
24 ///
25 /// 当程序计数器指向无效的操作码位置时产生
26 #[error("操作码越界")]
27 OpcodeOutOfBounds {
28 /// 无效的索引位置
29 index: usize,
30 /// 当前字节码的调试信息
31 bytecode: String,
32 },
33
34 /// 栈操作越界错误
35 ///
36 /// 当尝试从空栈弹出元素或栈索引无效时产生
37 #[error("栈越界")]
38 StackOutOfBounds {
39 /// 当前栈状态的调试信息
40 stack: String,
41 },
42
43 /// 日期时间解析错误
44 ///
45 /// 当无法解析日期时间字符串时产生
46 #[error("解析日期时间失败")]
47 ParseDateTimeErr {
48 /// 导致解析失败的时间戳字符串
49 timestamp: String,
50 },
51
52 /// 数字转换错误
53 ///
54 /// 当数字类型转换失败时产生
55 #[error("数字转换错误")]
56 NumberConversionError,
57}
58
59/// 虚拟机操作结果类型
60///
61/// 所有虚拟机操作的标准返回类型,成功时返回T,失败时返回VMError
62pub(crate) type VMResult<T> = Result<T, VMError>;