Skip to main content

gaia_assembler/types/
mod.rs

1//! Gaia 汇编器核心类型定义
2
3use serde::{Deserialize, Serialize};
4
5/// Gaia 地址空间
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum AddressSpace {
8    /// 通用/默认地址空间
9    Generic,
10    /// 栈/局部内存
11    Local,
12    /// 全局内存
13    Global,
14    /// 共享内存 (GPU LDS)
15    Shared,
16    /// 常量内存
17    Constant,
18    /// 托管堆 (JVM/CLR)
19    Managed,
20}
21
22/// Gaia 类型系统
23#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
24pub enum GaiaType {
25    // --- 标量类型 ---
26    /// 1位布尔类型
27    Bool,
28    /// 8位有符号整数
29    I8,
30    /// 8位无符号整数
31    U8,
32    /// 16位有符号整数
33    I16,
34    /// 16位无符号整数
35    U16,
36    /// 32位有符号整数
37    I32,
38    /// 32位无符号整数
39    U32,
40    /// 64位有符号整数
41    I64,
42    /// 64位无符号整数
43    U64,
44    /// 16位半精度浮点数
45    F16,
46    /// 32位单精度浮点数
47    F32,
48    /// 64位双精度浮点数
49    F64,
50
51    // --- 复合类型 ---
52    /// 指针类型 (指向类型, 地址空间)
53    Pointer(Box<GaiaType>, AddressSpace),
54    /// 数组类型 (元素类型, 长度)
55    Array(Box<GaiaType>, usize),
56    /// 向量类型 (元素类型, 数量)
57    Vector(Box<GaiaType>, usize),
58    /// 结构体类型 (名称/ID)
59    Struct(String),
60    /// 字符串类型 (托管或原始)
61    String,
62
63    // --- 托管类型 (Managed) ---
64    /// 动态对象类型 (Python/JS)
65    Object,
66    /// 托管类 (JVM/CLR)
67    Class(String),
68    /// 接口/特征 (Interface/Trait)
69    Interface(String),
70    /// 动态/任意类型 (Variant)
71    Any,
72
73    // --- 领域特定类型 (Domain) ---
74    /// 张量类型 (元素类型, 形状)
75    /// 形状中使用 -1 表示动态维度
76    Tensor(Box<GaiaType>, Vec<isize>),
77
78    // --- 特殊类型 ---
79    /// 空类型
80    Void,
81    /// 不透明类型 (用于外部引用)
82    Opaque(String),
83    /// 函数指针
84    FunctionPtr(Box<GaiaSignature>),
85}
86
87/// 函数签名
88#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
89pub struct GaiaSignature {
90    pub params: Vec<GaiaType>,
91    pub return_type: GaiaType,
92}