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

+12 -3
View File
@@ -10,7 +10,8 @@ from lib.core.SymbolData import (
FuncSymbolData, DefineSymbolData, AnonymousTypeData
)
from lib.core.Handles.HandlesBase import CTypeInfo
from lib.core.SymbolUtils import AnnotationContainsTType, CheckAnnotationHasCInline, IsTModule, AnnotationContainsName
from lib.core.SymbolUtils import AnnotationContainsTType, CheckAnnotationHasCInline, IsTModule, AnnotationContainsName
from lib.core.SymbolUtils import EnumClassIntWidth, _ENUM_DEFAULT_INT_WIDTH
from lib.includes import t
@@ -24,7 +25,7 @@ class ASTSymbolExtractor:
"""提取文件中的所有符号信息"""
with open(file_path, 'r', encoding='utf-8') as f:
code: str = f.read()
tree: ast.Module = ast.parse(code)
tree: ast.Module = ast.parse(code, file_path)
result: ModuleSymbols = ModuleSymbols(file_path=file_path)
@@ -192,9 +193,16 @@ class ASTSymbolExtractor:
type_kind = 'exception'
break
# 提取枚举成员
# 枚举成员提取 + 存储宽度推导("最宽成员类型",与定义端
# HandlesClassDef._RegisterEnumMembers / TPV ClassGenEnum 同一规则源)。
# 本条通路(LoadModuleSymbols → 消费 .vpi/.pyi)是**跨模块符号表**的来源
# (Phase2Translator._build_shared_symbol_data → _shared_sym.json pickle),
# 宽度在此推导后随条目序列化,跨模块读取端(HandlesImports 的 .vpi 直读
# 路径 + _enum_int_type)即得到同一宽度;旧产物/老 pickle 无该字段 → 退 32。
enum_members: list[tuple[str, int, int]] = []
enum_width: int = _ENUM_DEFAULT_INT_WIDTH
if type_kind == 'enum':
enum_width = EnumClassIntWidth(node.body, self._symtab)
next_enum_value: int = 0
for item in node.body:
if isinstance(item, ast.Assign):
@@ -257,6 +265,7 @@ class ASTSymbolExtractor:
is_cpython_object=is_cpython_object,
is_packed=is_packed,
enum_members=enum_members,
enum_width=enum_width,
)
# ------------------------------------------------------------------