取消了 i8* == i8* 实际使用 strcmp 的规则
This commit is contained in:
@@ -152,7 +152,7 @@ func: Function | t.CPtr = mod_core.CreateFunction(mod, "main", ret_ty)
|
||||
|
||||
### `linkedlist` 模块(NoVTable + PEP 695 泛型示范)
|
||||
|
||||
[includes/linkedlist](../includes/linkedlist.py) 提供链表实现,是 `@t.NoVTable` 非多态继承和 PEP 695 递归泛型继承的典范用例:
|
||||
[includes/linkedlist](../includes/linkedlist.vp) 提供链表实现,是 `@t.NoVTable` 非多态继承和 PEP 695 递归泛型继承的典范用例:
|
||||
|
||||
```python
|
||||
from linkedlist import LinkedNode, GSList
|
||||
@@ -193,14 +193,14 @@ handle: HANDLE = CreateFileA("test.txt", GENERIC_READ, FILE_SHARE_READ,
|
||||
Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整的模块解析流程与两阶段编译紧密耦合:
|
||||
|
||||
1. **阶段一**:从入口文件出发,通过 `import` 语句递归发现所有可达的源文件
|
||||
2. **阶段一**:对每个源文件生成 `<SHA1>.pyi` 签名存根和 `<SHA1>.stub.ll` LLVM IR 声明
|
||||
3. **阶段二**:加载所有 `.pyi` 和 `.stub.ll`,构建共享符号表
|
||||
2. **阶段一**:对每个源文件生成 `<SHA1>.vpi` 签名存根和 `<SHA1>.stub.ll` LLVM IR 声明
|
||||
3. **阶段二**:加载所有 `.vpi` 和 `.stub.ll`,构建共享符号表
|
||||
4. **阶段二**:翻译源文件时,通过符号表解析跨模块的类型和函数引用
|
||||
5. **阶段二**:将被引用模块的 `.stub.ll` 声明嵌入到生成的 `.ll` 文件头部
|
||||
|
||||
### 类型存根文件(.pyi)
|
||||
### 类型存根文件(.vpi)
|
||||
|
||||
`.pyi` 文件是模块的声明接口,由 `PythonToStubConverter` 在阶段一生成。存根文件的内容规则:
|
||||
`.vpi` 文件是模块的声明接口,由 `PythonToStubConverter` 在阶段一生成。存根文件的内容规则:
|
||||
|
||||
| 元素 | 存根表示 |
|
||||
|------|---------|
|
||||
@@ -228,7 +228,7 @@ Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整
|
||||
### 跨模块类型引用
|
||||
|
||||
```python
|
||||
# 在 fat32_types.py 中定义
|
||||
# 在 fat32_types.vp 中定义
|
||||
class fat32_fileinfo:
|
||||
fname: list[t.CChar, 13]
|
||||
attr: t.CUInt8T
|
||||
|
||||
Reference in New Issue
Block a user