- 全量降级点改 fail-fast:23 文件约 140+ 处静默 i32/i8*/void/continue 兜底改为 HandlesType.fatal_error(python traceback 风格)或 VLogger.error 终止,暴露上游根因;保留语言语义默认(无注解 i32/infer 链/CIf/star 回退) - 泛型特化 Phase B 补译 reemit 强制发射方法体(修复 list[...] define 缺失) - c.Deref 读取宽度仅按赋值直接 RHS 推断(修复 CurAssignAnnot 残留误判 i32) - 类型别名清理:t.CChar|t.CPtr→str、t.CInt→int 等
59 lines
2.0 KiB
Plaintext
59 lines
2.0 KiB
Plaintext
import t, c
|
||
from stdint import *
|
||
import memhub
|
||
import llvmlite
|
||
import lib.core.Handles.HandlesVar as HandlesVar
|
||
import lib.core.Handles.HandlesExprCall as HandlesExprCall
|
||
|
||
|
||
# ============================================================
|
||
# BaseGenMixin - 生成器基座(状态容器)
|
||
#
|
||
# 对象化重构 P1(方案见 wiki/14-oo-refactor.md):
|
||
# 将 Translator/Handles 的共享状态集中于此。后续 Mixin
|
||
# (TypeGen/StructGen/ExprGen/CallGen/FuncGen/ClassGen/StmtGen/
|
||
# ImportsGen)单继承本类,逐步把 Handles* 模块的函数迁移为
|
||
# Generator 的方法,消除 (pool, builder, mod, node, ...) 六参连传。
|
||
#
|
||
# 注意:@t.NoVTable(静态绑定,骨架无多态需求;若未来需要
|
||
# 运行时多态再改 @t.CVTable,字段布局由编译器统一管理)。
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class BaseGenMixin:
|
||
"""生成器状态容器(基座)"""
|
||
|
||
# 内存/IR 状态
|
||
Pool: memhub.MemBuddy | t.CPtr # 内存池
|
||
Module: llvmlite.LLVMModule | t.CPtr # 当前 LLVM 模块
|
||
Builder: llvmlite.IRBuilder | t.CPtr # 当前 IRBuilder
|
||
# 符号表/函数表
|
||
SymTab: HandlesVar.SymbolTable | t.CPtr
|
||
Funcs: HandlesExprCall.FuncEntry | t.CPtr
|
||
FuncCount: int
|
||
# 导入/模块信息
|
||
ImportedModules: str
|
||
FromImports: str
|
||
ModuleSha1: str
|
||
# 当前翻译上下文
|
||
CurFunc: llvmlite.Function | t.CPtr
|
||
CurBuilder: llvmlite.IRBuilder | t.CPtr
|
||
CurClassName: str
|
||
|
||
def InitBaseGen(self, pool: memhub.MemBuddy | t.CPtr) -> int:
|
||
"""初始化生成器状态(默认值;子类构造时调用)"""
|
||
if self is None:
|
||
return 1
|
||
self.Pool = pool
|
||
self.Module = None
|
||
self.Builder = None
|
||
self.SymTab = None
|
||
self.Funcs = None
|
||
self.FuncCount = 0
|
||
self.ImportedModules = None
|
||
self.FromImports = None
|
||
self.ModuleSha1 = None
|
||
self.CurFunc = None
|
||
self.CurBuilder = None
|
||
self.CurClassName = None
|
||
return 0
|