Skip to main content

oak_msil/ast/
mod.rs

1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4/// MSIL 抽象语法树的根节点
5#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct MsilRoot {
7    /// 指令、类、方法等项目列表
8    pub items: Vec<Item>,
9}
10
11/// MSIL 中的顶级项目
12#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum Item {
14    /// 程序集定义
15    Assembly(Assembly),
16    /// 模块定义
17    Module(String),
18    /// 类定义
19    Class(Class),
20    /// 外部程序集引用
21    AssemblyExtern(String),
22}
23
24/// 程序集定义
25#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
26pub struct Assembly {
27    pub name: String,
28    #[serde(with = "oak_core::serde_range")]
29    pub span: Range<usize>,
30}
31
32/// 类定义
33#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
34pub struct Class {
35    pub name: String,
36    pub methods: Vec<Method>,
37    #[serde(with = "oak_core::serde_range")]
38    pub span: Range<usize>,
39}
40
41/// 方法定义
42#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
43pub struct Method {
44    pub name: String,
45    pub instructions: Vec<Instruction>,
46    #[serde(with = "oak_core::serde_range")]
47    pub span: Range<usize>,
48}
49
50/// 指令
51#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
52pub struct Instruction {
53    pub opcode: String,
54    pub operand: Option<String>,
55    #[serde(with = "oak_core::serde_range")]
56    pub span: Range<usize>,
57}
58
59pub struct MsilAssembly {
60    pub name: String,
61}