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>;