R14:rawptr[X] -> X*(56 文件 / 834 行改动);保留 6 处 rawptr[t.CPtr](存纯裸指针的规范例外)。 修复:class X(t.REnum) 的变体字段写成自引用 X* 时,字段解析在变体扫描期经 ensure_forward_class 建了一个 opaque 前向占位;末尾 register_struct 按 Ty 指针去重会再建第二个同名 entry,而 find_struct 取首个(占位,0 字段)→ X.__sizeof__() == 0,报「已注册但大小为 0(字段链表未填充)」。改为注册前若命中同模块前向占位则就地填充(与 ensure_forward_class 文档口径一致)。TPC 无此问题,属 TPV 侧缺口。 验证:自举三重重编 SUCCESS;全量 77/77 顺序回归通过(修复前卡在 LLvmLiteTest)。
47 lines
1.4 KiB
Plaintext
47 lines
1.4 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 mlirlite
|
|
|
|
|
|
# BaseGenMixin - generator base (state container).
|
|
novirtual class BaseGenMixin:
|
|
"""Generator state container (base)."""
|
|
|
|
# Memory / IR state
|
|
Gen: Generator.Generator*
|
|
Pool: memhub.MemBuddy* # Memory pool
|
|
Module: mlirlite.LLVMModule* # Current LLVM module
|
|
Builder: mlirlite.IRBuilder* # Current IRBuilder
|
|
# Symbol / function tables
|
|
SymTab: GenTypes.SymbolTable*
|
|
Funcs: GenTypes.FuncEntry*
|
|
FuncCount: int
|
|
# Import / module info
|
|
ImportedModules: str
|
|
FromImports: str
|
|
ModuleSha1: str
|
|
# Current translation context
|
|
CurFunc: mlirlite.Function*
|
|
CurBuilder: mlirlite.IRBuilder*
|
|
CurClassName: str
|
|
|
|
def InitBaseGen(self, pool: memhub.MemBuddy*) -> int:
|
|
"""Initialize generator state to defaults; called from subclass constructors."""
|
|
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
|