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:
TermiNexus committed 2026-08-29 06:15:00 +08:00
1 parent 2610f361fd
commit fa90586a83
7 files changed
+138 -187

No files matched your search

+5 -3
View File
@@ -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