取消了 i8* == i8* 实际使用 strcmp 的规则

This commit is contained in:
2026-07-30 21:56:41 +08:00
parent cfc30d735c
commit 377b60fd67
54 changed files with 129 additions and 3730 deletions

View File

@@ -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 而非胖节点)