- Gen 内部 1742 处 HandlesX.func() 改 self.Gen.Y.method() 链式调用 - 数据类/常量迁移 GenTypes.vp(10 类 + CLASS_META_*/META_*/SEQ_KIND_*/FIELD_MAX 等) - 管线/保留文件经 GenApi.vp 模块级入口(48 函数带类型注解,从 Gen 方法签名自动生成) - 删除 26 个纯委托 Handles 文件,仅留 5 个实体文件(Base/Translator/Expr/ExprCall/ExprCallTable) - 修复字段分裂:TypeGenErr CurrentFile/TraceCount 链式化;CallGenBase TempDir/Cexport 真源化
61 lines
2.1 KiB
Plaintext
61 lines
2.1 KiB
Plaintext
import lib.core.Gen.GenTypes as GenTypes
|
||
import lib.core.Gen.Generator as Generator
|
||
import t, c
|
||
from stdint import *
|
||
import memhub
|
||
import llvmlite
|
||
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 状态
|
||
Gen: Generator.Generator | t.CPtr
|
||
Pool: memhub.MemBuddy | t.CPtr # 内存池
|
||
Module: llvmlite.LLVMModule | t.CPtr # 当前 LLVM 模块
|
||
Builder: llvmlite.IRBuilder | t.CPtr # 当前 IRBuilder
|
||
# 符号表/函数表
|
||
SymTab: GenTypes.SymbolTable | t.CPtr
|
||
Funcs: GenTypes.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
|