fix(sizeof,parse): 尺寸链去静默兜底,解析报错可定位,补 C 解析器缺口
StructGen: _get_struct_size/_get_align 去 opaque→8/ptr_size、未知→4 兜底并补 VectorType;LiteralStructType.fields→.elements(llvmlite 无 fields,必然 AttributeError) HandlesClassDef: union 载荷尺寸经不存在的 ir.DataLayout 静默退化成 8 字节;HandlesExprCall/ExprBuiltin: sizeof 各静默 0 分支改 fail-fast,数组元素 sizeof 统一走 _get_struct_size HandlesFor: nonlocal struct/array 堆分配不再退化成 malloc(8) vast/vast_c: 补一元 * / & 解析,装饰器后 extern/export 分派修复,C 侧报错带 token 与行号;StubGen.Converter: 宏展开丢尾随空行修 .pyi 缩进非法 其余为 rawptr 迁移 / fail-fast 口径等历史改动一并入库
This commit is contained in:
1 parent
53a345a59a
commit
c83fc752c6
53 files changed
+6238
-887
No files matched your search
+12
-12
@@ -257,10 +257,10 @@ class BaseGenMixin:
|
||||
# True=每个 define 发 DISubprogram + 入口首条指令发 DILocation。
|
||||
self.dwarf_enabled: bool = False
|
||||
self.DebugInfo: Any = None
|
||||
# Ctrl+C 调用栈(--ctrlc-stack):仅在翻译 includes/dbgstack.vp 这一个模块时
|
||||
# Ctrl+C 调用栈(--traceback):仅在翻译 includes/traceback.vp 这一个模块时
|
||||
# 置 True —— 落成 .ll 文本前为本模块注入 @llvm.global_ctors 构造器调用其
|
||||
# Install()(见 _RegisterDbgStackInstallViaCtor)。默认 False(零影响)。
|
||||
self.ctrlc_stack_ctor: bool = False
|
||||
# Install()(见 _RegisterTracebackInstallViaCtor)。默认 False(零影响)。
|
||||
self.traceback_ctor: bool = False
|
||||
pi: dict[str, bool | int] = self._platform_info
|
||||
# 根据目标平台设置宏(声明式,从三元组推导)
|
||||
if pi['is_windows']:
|
||||
@@ -2100,12 +2100,12 @@ class BaseGenMixin:
|
||||
gv.linkage = 'appending'
|
||||
gv.initializer = ir.Constant(arr_ty, [entry_val])
|
||||
|
||||
def _RegisterDbgStackInstallViaCtor(self) -> None:
|
||||
"""用 @llvm.global_ctors 在进程启动期调用本模块的 Install()(--ctrlc-stack)。
|
||||
def _RegisterTracebackInstallViaCtor(self) -> None:
|
||||
"""用 @llvm.global_ctors 在进程启动期调用本模块的 Install()(--traceback)。
|
||||
|
||||
仅在"本翻译单元就是 includes/dbgstack.vp"时由 StructGen.finalize() 调用
|
||||
(ctrlc_stack_ctor 由 Phase2Translator._translate_file 按源文件名置位)。
|
||||
生成 internal void @__dbgstack_install_ctor()(entry 块直接 call 本模块的
|
||||
仅在"本翻译单元就是 includes/traceback.vp"时由 StructGen.finalize() 调用
|
||||
(traceback_ctor 由 Phase2Translator._translate_file 按源文件名置位)。
|
||||
生成 internal void @__traceback_install_ctor()(entry 块直接 call 本模块的
|
||||
Install() 并忽略其 int 返回值),再写入 appending linkage 的
|
||||
@llvm.global_ctors —— 每模块一份,链接器按 appending 语义拼进 .init_array,
|
||||
进程启动时执行一次。
|
||||
@@ -2121,22 +2121,22 @@ class BaseGenMixin:
|
||||
install_fn: ir.Function | None = self._find_function('Install')
|
||||
if install_fn is None:
|
||||
raise RuntimeError(
|
||||
'--ctrlc-stack: 在 dbgstack 模块内找不到 Install() 函数,'
|
||||
'--traceback: 在 traceback 模块内找不到 Install() 函数,'
|
||||
'无法注入启动期构造器(不静默降级)')
|
||||
i32: ir.IntType = ir.IntType(32)
|
||||
i8p: ir.PointerType = ir.PointerType(ir.IntType(8))
|
||||
void_fnptr: ir.PointerType = ir.PointerType(ir.FunctionType(ir.VoidType(), []))
|
||||
ctor: ir.Function = ir.Function(
|
||||
self.module, ir.FunctionType(ir.VoidType(), []),
|
||||
name=self._UniqueGlobalName('__dbgstack_install_ctor'))
|
||||
name=self._UniqueGlobalName('__traceback_install_ctor'))
|
||||
ctor.linkage = 'internal'
|
||||
cb: ir.IRBuilder = ir.IRBuilder(ctor.append_basic_block(name='entry'))
|
||||
cb.call(install_fn, []) # Install() 无参;返回值(int)有意忽略
|
||||
cb.ret_void()
|
||||
if 'llvm.global_ctors' in self.module.globals:
|
||||
raise RuntimeError(
|
||||
'--ctrlc-stack: 模块内已存在 @llvm.global_ctors,'
|
||||
'无法注入 dbgstack 启动期构造器(不静默降级)')
|
||||
'--traceback: 模块内已存在 @llvm.global_ctors,'
|
||||
'无法注入 traceback 启动期构造器(不静默降级)')
|
||||
elem_ty: ir.LiteralStructType = ir.LiteralStructType([i32, void_fnptr, i8p])
|
||||
arr_ty: ir.ArrayType = ir.ArrayType(elem_ty, 1)
|
||||
entry_val: ir.Constant = ir.Constant(elem_ty, [
|
||||
|
||||
Reference in new issue
Block a user