取消了 i8* == i8* 实际使用 strcmp 的规则
This commit is contained in:
@@ -25,7 +25,7 @@ LLVM 类型变体少、无通用字段、字段都是指针/小整数、操作
|
||||
|
||||
### 2.4 对象分配用普通类 + `mpool`
|
||||
|
||||
像 `mbuddy` 一样用普通类(无 `__new__`),由调用方注入 `mpool.MPool` 做批量分配。库内部不持有全局 `mbuddy`,遵循项目约定(`_mbuddy` 指针由 `os.py` 或调用方设置)。
|
||||
像 `mbuddy` 一样用普通类(无 `__new__`),由调用方注入 `mpool.MPool` 做批量分配。库内部不持有全局 `mbuddy`,遵循项目约定(`_mbuddy` 指针由 `os.vp` 或调用方设置)。
|
||||
|
||||
---
|
||||
|
||||
@@ -68,22 +68,22 @@ AST 采用"胖节点"设计(所有节点共用一个 `AST` struct,用 `vtype
|
||||
|
||||
```
|
||||
includes/llvmlite/
|
||||
├── __init__.py # 公共导出 + 便捷工厂函数
|
||||
├── __types.py # LLVMType (REnum) + 类型构造/打印
|
||||
├── __values.py # Value/Constant/SSA 值表示
|
||||
├── __module.py # Module 容器(函数列表 + 目标三元组 + 输出 .ll)
|
||||
├── __function.py # Function + BasicBlock + 参数管理
|
||||
├── __builder.py # IRBuilder(指令发射 + SSA 命名 + 块跳转)
|
||||
├── __init__.vp # 公共导出 + 便捷工厂函数
|
||||
├── __types.vp # LLVMType (REnum) + 类型构造/打印
|
||||
├── __values.vp # Value/Constant/SSA 值表示
|
||||
├── __module.vp # Module 容器(函数列表 + 目标三元组 + 输出 .ll)
|
||||
├── __function.vp # Function + BasicBlock + 参数管理
|
||||
├── __builder.vp # IRBuilder(指令发射 + SSA 命名 + 块跳转)
|
||||
└── README.md # 本文件
|
||||
```
|
||||
|
||||
### 职责划分
|
||||
|
||||
- `__types.py`:`LLVMType` REnum 定义 + `TypePrint(buf, ty)` 将类型序列化为 IR 文本(如 `i32`/`i32*`/`{i32, i8*}`)
|
||||
- `__values.py`:`Value` 表示一个 SSA 值(`%0`/`%result`/常量),含类型指针 + 名字 + 是否常量
|
||||
- `__module.py`:`Module` 持有函数链表 + 目标三元组 + 数据布局,`ModulePrint` 输出完整 `.ll`
|
||||
- `__function.py`:`Function` 持有基本块链表 + 参数 + 返回类型;`BasicBlock` 持有指令文本缓冲
|
||||
- `__builder.py`:`IRBuilder` 游标式 API,`build_add`/`build_load`/`build_br`/... 发射指令到当前块
|
||||
- `__types.vp`:`LLVMType` REnum 定义 + `TypePrint(buf, ty)` 将类型序列化为 IR 文本(如 `i32`/`i32*`/`{i32, i8*}`)
|
||||
- `__values.vp`:`Value` 表示一个 SSA 值(`%0`/`%result`/常量),含类型指针 + 名字 + 是否常量
|
||||
- `__module.vp`:`Module` 持有函数链表 + 目标三元组 + 数据布局,`ModulePrint` 输出完整 `.ll`
|
||||
- `__function.vp`:`Function` 持有基本块链表 + 参数 + 返回类型;`BasicBlock` 持有指令文本缓冲
|
||||
- `__builder.vp`:`IRBuilder` 游标式 API,`build_add`/`build_load`/`build_br`/... 发射指令到当前块
|
||||
|
||||
---
|
||||
|
||||
@@ -120,7 +120,7 @@ class LLVMType(t.REnum):
|
||||
# (REnum 允许空变体,仅靠 __tag 区分)
|
||||
```
|
||||
|
||||
### 类型工厂(`__init__.py` 导出)
|
||||
### 类型工厂(`__init__.vp` 导出)
|
||||
|
||||
```python
|
||||
def Int1() -> LLVMType | t.CPtr: ... # i1
|
||||
@@ -295,7 +295,7 @@ def ModulePrint(mod: Module | t.CPtr, out_path: t.CChar | t.CPtr):
|
||||
## 12. 与现有架构的对接点
|
||||
|
||||
- **`lib/core/Codegen/LLVMCG.py`**:当前用 Python `llvmlite` 生成 IR,自举时改用本库
|
||||
- **`includes/viperlib.py`**:提供 `snprintf` / `sprintf`
|
||||
- **`includes/mpool.py`**:提供 `MPool` 内存池
|
||||
- **`includes/string.py`**:提供 `strcpy`/`strlen`/`memcpy`
|
||||
- **`includes/viperlib.vp`**:提供 `snprintf` / `sprintf`
|
||||
- **`includes/mpool.vp`**:提供 `MPool` 内存池
|
||||
- **`includes/string.vp`**:提供 `strcpy`/`strlen`/`memcpy`
|
||||
- **`includes/ast/`**:参考其"胖节点 + mpool + CEnum 常量"的组织方式(但类型系统用 REnum 而非胖节点)
|
||||
|
||||
Reference in New Issue
Block a user