refactor(tpv): 类型系统收敛——正常库分析优先,t/c 库内部特判兜底
- 阶段1a:Name 分支 from-import 别名反查(from t import CInt as XXX 可解析, 支撑 YYY: t.CTypedef = XXX 复杂别名链) - 阶段1b:Attribute 路径 CTypedef 动态表优先(stdint.INT 走库定义) - 阶段2:map_t_type 删除与 stdint.vp 重复的 ~70 个硬编码别名(保留 t/c 核心 原语 + float/double + HANDLE/LPCSTR/LPCWSTR),新增 resolve_typedef_or_map/ get_type_size_bytes 统一口径 + GenApi 委托,改造 VpiReader/ClassGenEnum/ TypeGenErr 旁路调用点 - 阶段3:__sizeof__/REnum 尺寸/无符号名单三张派生表加 CTypedef 动态兜底
This commit is contained in:
1 parent
2610f361fd
commit
fa90586a83
7 files changed
+138
-187
No files matched your search
@@ -917,7 +917,9 @@ def _resolve_single_vpi_type_str(pool: memhub.MemBuddy | t.CPtr,
|
||||
# "1fdad1c76fb116bc.free 返回类型无法精确获取" 根因)。
|
||||
if string.strcmp(attr_nm, "CExport") == 0:
|
||||
return llvmlite.Void(pool)
|
||||
mapped_ty: llvmlite.LLVMType | t.CPtr = GenApi.map_t_type(pool, attr_nm)
|
||||
# [阶段2] 统一口径:CTypedef 动态表优先(库 typedef 走正常库分析),
|
||||
# miss 回退 map_t_type(t/c 库内部特判)。
|
||||
mapped_ty: llvmlite.LLVMType | t.CPtr = GenApi.resolve_typedef_or_map(pool, attr_nm, None, None)
|
||||
if mapped_ty is not None:
|
||||
return mapped_ty
|
||||
return None
|
||||
@@ -945,8 +947,8 @@ def _resolve_single_vpi_type_str(pool: memhub.MemBuddy | t.CPtr,
|
||||
bare_enum_ty: llvmlite.LLVMType | t.CPtr = GenApi.get_enum_base_type(seg)
|
||||
if bare_enum_ty is not None:
|
||||
return bare_enum_ty
|
||||
# 裸 typedef 名(如 VOIDPTR)
|
||||
mapped_bare: llvmlite.LLVMType | t.CPtr = GenApi.map_t_type(pool, seg)
|
||||
# 裸 typedef 名(如 VOIDPTR):CTypedef 动态表优先,miss 回退 map_t_type
|
||||
mapped_bare: llvmlite.LLVMType | t.CPtr = GenApi.resolve_typedef_or_map(pool, seg, None, None)
|
||||
if mapped_bare is not None:
|
||||
return mapped_bare
|
||||
return None
|
||||
|
||||
Reference in new issue
Block a user