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:
TermiNexus committed 2026-09-26 19:27:22 +08:00
1 parent 53a345a59a
commit c83fc752c6
53 files changed
+6238 -887

No files matched your search

+10 -4
View File
@@ -898,7 +898,7 @@ class FunctionHandle(BaseHandle):
if '[' in replacement:
SubNode: ast.AST | None = None
try:
SubNode = ast.parse(replacement, mode='eval').body
SubNode = ast.parse(replacement, '<stub:type_expr>', mode='eval').body
except Exception:
SubNode = None
if not isinstance(SubNode, ast.Subscript):
@@ -936,7 +936,7 @@ class FunctionHandle(BaseHandle):
slice_node = self._make_replacement_node(inner_name)
else:
try:
slice_node = ast.parse(inner_name, mode='eval').body
slice_node = ast.parse(inner_name, '<stub:type_expr>', mode='eval').body
except Exception:
slice_node = self._make_name_node(inner_name)
if slice_node is None:
@@ -1627,8 +1627,10 @@ class FunctionHandle(BaseHandle):
if Arg.annotation:
try:
PInfo = self.ResolveAnnotationType(Arg.annotation)
if PInfo and (PInfo.DataConst or PInfo.VarConst):
Gen.var_const_flags[Arg.arg] = True
# const/volatile 形参登记(统一登记入口)。const 判据沿用形参历史
# 条件(IsParam=True,见 BaseGen.RegisterVarQualifiers 说明);
# volatile / pointee-volatile 与 TransPyV 侧同口径。
Gen.RegisterVarQualifiers(Arg.arg, PInfo, Arg.annotation, IsParam=True)
except Exception as _e:
if _config_mode == "strict":
self.Trans.LogWarning(f"异常被忽略: {_e}")
@@ -2140,6 +2142,10 @@ class FunctionHandle(BaseHandle):
Gen.var_struct_class = {}
Gen.var_ptr_element = {}
Gen.var_const_flags = {}
# const/volatile 的**函数作用域层**随函数出栈清空(模块级层 global_* 与
# 类字段层 field_* 是持久的,不在此清;见 BaseGen 的登记说明)。
Gen.var_volatile_flags = {}
Gen.var_pointee_volatile_flags = {}
# 恢复保存的 var_type_info
Gen.var_type_info = saved_var_type_info
Gen.var_type_assignments = saved_var_type_assignments