重置上传,新增了多个标准库,开始 TransPyV 自举实验
This commit is contained in:
@@ -389,12 +389,24 @@ class BaseGenMixin:
|
||||
return int(llvm_str[1:])
|
||||
|
||||
# 4. 特殊名称(非整数类型,但需要标记为 typedef 以跳过 opaque 定义)
|
||||
# 注意:如果 name 已注册为 struct(用户定义了同名 class,如 includes/_dict.py 中的 dict),
|
||||
# 则不应视为 typedef,应返回 None 让调用方走 struct 创建路径。
|
||||
# 解决时序问题:_parse_llvm_declare 从 stub.ll 解析时 dict 可能尚未注册到 Gen.structs,
|
||||
# 但 SymbolTable 在 .pyi 解析阶段已就绪,可通过 is_struct 检查区分 class 和 typedef。
|
||||
_SPECIAL_TYPEDEFS: set[str] = {
|
||||
'typedef', 'CType', 'CVolatile', 'CEnum', 'CUnion',
|
||||
'CStruct', 'enum', 'REnum', 'renum',
|
||||
'list', 'dict', 'tuple', 'set', 'str', 'bytes', 'array', 'type', 'CArray',
|
||||
}
|
||||
if name in _SPECIAL_TYPEDEFS:
|
||||
if name in self.structs:
|
||||
return None # 已注册为 struct,不视为 typedef
|
||||
if self.SymbolTable is not None:
|
||||
try:
|
||||
if self.SymbolTable.is_struct(name):
|
||||
return None # SymbolTable 中标记为 struct,不视为 typedef
|
||||
except Exception:
|
||||
pass
|
||||
return 0 # 标记为 typedef,但位宽为 0(非整数)
|
||||
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user