From f99666420bbba11d54d090749d148c5c5a013d03 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 18 Jun 2026 12:42:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B5=202=20=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO | 1 + Test/CPythonTest/temp/_shared_sym.pkl | Bin 327215 -> 543320 bytes Test/TestProject/temp/_shared_sym.pkl | Bin 778465 -> 844720 bytes Test/TestProject2/temp/_shared_sym.pkl | Bin 197415 -> 185686 bytes Test/TestProject3/temp/_shared_sym.pkl | Bin 512306 -> 548378 bytes Test/ZlibTest/temp/_shared_sym.pkl | Bin 402233 -> 385220 bytes Test/test_out.txt | 1 + Test/test_output.txt | 1 + lib/core/Handles/HandlesBase.py | 325 ++++++++-------- lib/core/Handles/HandlesClassDef.py | 12 +- lib/core/Handles/HandlesExprCall.py | 16 +- lib/core/LLVMCG/BaseGen.py | 4 + lib/core/LLVMCG/FuncGen.py | 6 +- lib/core/SymbolNode.py | 31 +- lib/core/SymbolTable.py | 490 ++++++++++-------------- lib/core/Translator/AnnotationLoader.py | 118 +++--- lib/core/Translator/LlvmGenerator.py | 163 ++++---- lib/core/Translator/PythonParser.py | 45 +-- lib/core/TypeSpec.py | 302 +++++++++++++++ 19 files changed, 874 insertions(+), 641 deletions(-) create mode 100644 Test/test_out.txt create mode 100644 Test/test_output.txt create mode 100644 lib/core/TypeSpec.py diff --git a/TODO b/TODO index 715c0f9..a381065 100644 --- a/TODO +++ b/TODO @@ -4,3 +4,4 @@ main 收集 元类型 @p.set 函数的描述符用装饰器而不是返回值 +崩溃/返回作用域 回调 \ No newline at end of file diff --git a/Test/CPythonTest/temp/_shared_sym.pkl b/Test/CPythonTest/temp/_shared_sym.pkl index b106fafe61e86b84682b8d26ccb6a241356764e3..59d9977f330c2ccf9d61d30cc1aae0e463dc2645 100644 GIT binary patch literal 543320 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 D(1dOm literal 327215 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 diff --git a/Test/TestProject/temp/_shared_sym.pkl b/Test/TestProject/temp/_shared_sym.pkl index fbd62a48c39a6a330f5a19e97b43e73d7fb92ff8..72361f0a2612b454404955d1c0bdeccdf00e0bf0 100644 GIT binary patch literal 844720 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 literal 778465 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 wKCA4#yj5pBU9e^j>J(o{YV1z&g&-Uty!2kdN diff --git a/Test/TestProject2/temp/_shared_sym.pkl b/Test/TestProject2/temp/_shared_sym.pkl index 46cbf6c2787d6439984b2482b2b6b6110cf59e23..0d372ae5c6edf9de6ee14584b3adb62a5546bd69 100644 GIT binary patch literal 185686 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 QbZXVPHY`yo6-p=nKS8yXRR910 diff --git a/Test/TestProject3/temp/_shared_sym.pkl b/Test/TestProject3/temp/_shared_sym.pkl index 4a45d9a19d3a1178d8f73e2d5b735a5ec6f3d494..92438b1d93297fec2e95ecbe4736b497f475b4f3 100644 GIT binary patch literal 548378 zcmeFa4R9MAiXH2?Rk2k7R=bfYN(o&B6_!N#Z^b zpz$M#Z=>}a&&-Qx!}huc&uf?C^?IGeaXGH7Emv*4iDxIC{~1@xaW?C6oMbk3%Fbp} z9(!tMGn>silXGuh0NsrS(FD7J+t5*!x&fm5_U&`O``vTSJ@?!Xx*6;yKhOe(xde|ipOdh?l#lFE6t zf0qhlk<#BcHgjv~R3J)}Sk9Z2v)Q6l7%dextE_nC*qTC18V+O6}dKx0sISlW_mf77Klk zxKbnRF(UlVk7E?>+1*`)MGQOvDs#IuDPU?wEQ&xgHhaw1jvqbHM* zH`$}Qav6ob+R#EGnvpY`OLA_F{m?l9P0;I4sRG<8j7FBTN`@9+dR-9Uu}C(Z&%~6- zIuk(z>JnK2S<$+T7rNHrp~b?|>}!wdz1hcMC9|H8lxO+u<5?y9UM{`ym?2?l(+j_4 zbL_B`Nz;a#dYn_%Hy&SKxf!3l8JoNvUAcWLI(dC!V>1C_R#N%(9Ne+X(kG+0?%bZ9 zj!)f*U%wSsrqt5=*EiDXqz%R2n!0gIiQSr-l5gFO-=2)B#ScLH0N!jUfBL2zyE8Qn z^0^z0M`P2xeA)tuv<>CQu1`j9+=i0l(|4wB+`Prhe*(>u&e%}?O6=y{mFcO;n^8Fq zlDf;v&lgTbR+H(doQ$k+0*HXbUD2RmsQTxzOGFa%x|sU-Hqly=&cte*ek?ITcR=gA~Tf)TsU`JHgNX6}Y!_ zVX<6+Zq`+bYlCYCrF^t7Fqh7h%Q{i3EVu|btbA#?v^BX@&d{SZc(HOxr)rhNE(1=} zTy9d@D6pbRGvyM`)he-kX|b@c{8_!ttYk(#N@lfE*P11lFD({E)dI7XKa~Vp5y2p| zctw^cYt@%tRb-&y7n{_wpI)?_OC(|Fs9C+rHESR6+R(~mqlIDmQ(z;@rBFDtU0vY1 z;@an{UuT3C;>qPowJe<7t`vGY|vq zy>c>HDrj4A(+i7hzgAt$0dHtSi6!Kuwy2u&)?8a$`!7sN3u~_66Lmd0nw4jlf${_tpt-}OmG+f1t#X+)J3{G7=qw|p&%CnL6&?1&u$hd`A@w>a zb4YuKNlgc5((%o5Eo=6BdKL8h%Ecx{4Xe6nxvi>ui#^eSkV z%Ecx{fu&Jt;hLi)Tm++J`BIZ|hCy_S27KE!2VAE%NBIVm0*8WfB3qGJ&0&{a27OL* zxmjt8axPX8S!#|YzXQ4Yz4J0s# zy1)hi<)}BKB;{vH98{h{??Up)Iv6itUyMXlvmvx5PcF(Epsm60eG%2pRLzCK#ic-C zA>vu^-dqqg}o6_ybAlvU5{QtX%N(@@<�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 literal 512306 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 K>_Tbb;r|E2C`?@d diff --git a/Test/ZlibTest/temp/_shared_sym.pkl b/Test/ZlibTest/temp/_shared_sym.pkl index 12fffe1da3fe77aa742743e2216fe49ffedb9498..d42f8d00912e0b2939d4d762f28760b04a95c4e3 100644 GIT binary patch literal 385220 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 diff --git a/Test/test_out.txt b/Test/test_out.txt new file mode 100644 index 0000000..f302d06 --- /dev/null +++ b/Test/test_out.txt @@ -0,0 +1 @@ +UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 3: illegal multibyte sequence diff --git a/Test/test_output.txt b/Test/test_output.txt new file mode 100644 index 0000000..5838da2 --- /dev/null +++ b/Test/test_output.txt @@ -0,0 +1 @@ +====================================================================== diff --git a/lib/core/Handles/HandlesBase.py b/lib/core/Handles/HandlesBase.py index 94d0b9b..b958144 100644 --- a/lib/core/Handles/HandlesBase.py +++ b/lib/core/Handles/HandlesBase.py @@ -7,7 +7,8 @@ from lib.includes import t import ast from typing import List, Dict -from enum import IntFlag, auto +from enum import IntFlag, auto +from lib.core.TypeSpec import TypeSpec, SymbolMeta, FIELD_ROUTES EXCEPTION_CODE_MAP = { @@ -66,57 +67,72 @@ class CTypeInfo: """ def __init__(self): - self._BaseType: t.CType = None - self.PtrCount: int = 0 - self.VarConst: bool = False - self.VarVolatile: bool = False - self.DataConst: bool = False - self.DataVolatile: bool = False - self.ArrayDims: List[str] = [] - self.Storage: t.CType = None - self.IsFuncPtr: bool = False - self.FuncPtrParams: List[Tuple[str, 'CTypeInfo']] = [] # 函数指针参数列表:(参数名, 参数类型) - self.FuncParamNames: List[str] = [] # 函数参数名列表 - self.FuncPtrReturn: "CTypeInfo" = None - self.IsBitField: bool = False - self.BitWidth: int = 0 - self.ByteOrder: str = "" # "big", "little", or "" - self.IsTypedef: bool = False - self.IsStruct: bool = False - self.IsEnum: bool = False - self.IsUnion: bool = False - self.IsRenum: bool = False - self.RenumVariants: list = [] - self.Name: str = "" - self.Members: Dict[str, 'CTypeInfo'] = {} - self.OriginalType: "CTypeInfo" = None - self.DeclaredType: str = "" - self.CreturnTypes: list = [] - self.Lineno: int = 0 - self.file: str = "" - self.IsAnonymous: bool = False - self.IsCpythonObject: bool = False - self.IsEnumMember: bool = False - self.IsVariadic: bool = False - self.IsVariable: bool = False - self.IsFunction: bool = False - self.MetaList: FuncMeta = FuncMeta.NONE - self.IsArrayPtr: bool = False - self.ArrayPtr: 'CTypeInfo' = None - self.IsState: bool = False - self.IsDefine: bool = False - self.DefineValue = None - self.IsInline: bool = False - self.InlineBody: list = None - self.InlineParams: list = None - self.ModuleName: str = "" - self._extra: dict = {} + object.__setattr__(self, '_ts', TypeSpec()) + sm = SymbolMeta() + sm.meta_list = FuncMeta.NONE + object.__setattr__(self, '_sm', sm) + + # --- 新公共 API:供新代码直接访问 TypeSpec / SymbolMeta / SymbolKind --- + @property + def ts(self) -> TypeSpec: + """TypeSpec — 纯类型描述(只读)""" + return self._ts + + @property + def sm(self) -> SymbolMeta: + """SymbolMeta — 符号表元数据(只读)""" + return self._sm + + @property + def kind(self) -> 'SymbolKind': + """SymbolKind — 符号类型种类枚举""" + return self._sm.kind + + def __setattr__(self, name, value): + """属性设置路由 — 将旧字段名委托到 _ts/_sm/_kind_flags""" + if name == 'BaseType': + # BaseType 有复杂的 property setter(自动设置 IsStruct/IsEnum/IsUnion) + CTypeInfo.BaseType.fset(self, value) + return + if name in ('_ts', '_sm', 'ts', 'sm', 'kind'): + # _ts/_sm 内部字段直接设置;ts/sm/kind 是只读 property,禁止设置 + if name in ('ts', 'sm', 'kind'): + raise AttributeError(f"'CTypeInfo' attribute '{name}' is read-only") + object.__setattr__(self, name, value) + return + if name in FIELD_ROUTES: + target, field = FIELD_ROUTES[name] + if target == 'ts': + setattr(self._ts, field, value) + elif target == 'sm': + setattr(self._sm, field, value) + elif target == 'kf': + self._sm._kind_flags[field] = value + return + object.__setattr__(self, name, value) + + def __getattr__(self, name): + """属性读取路由 — 将旧字段名委托到 _ts/_sm/_kind_flags""" + try: + ts = object.__getattribute__(self, '_ts') + sm = object.__getattribute__(self, '_sm') + except AttributeError: + raise AttributeError(f"'CTypeInfo' object has no attribute '{name}'") + if name in FIELD_ROUTES: + target, field = FIELD_ROUTES[name] + if target == 'ts': + return getattr(ts, field) + elif target == 'sm': + return getattr(sm, field) + elif target == 'kf': + return sm._kind_flags.get(field, False) + raise AttributeError(f"'CTypeInfo' object has no attribute '{name}'") @property def BaseType(self) -> t.CType | tuple: - return self._BaseType + return self._ts._base_type @BaseType.setter def BaseType(self, value: t.CType | type | tuple | List): @@ -127,54 +143,57 @@ class CTypeInfo: - type (CType 子类): 如 t.CStruct,自动实例化 - tuple/list of t.CType: 多个组合类型 """ + ts = self._ts + kf = self._sm._kind_flags + if value is None: - self._BaseType = None - self.IsStruct = False - self.IsEnum = False - self.IsUnion = False - self.IsRenum = False + ts._base_type = None + kf['IsStruct'] = False + kf['IsEnum'] = False + kf['IsUnion'] = False + kf['IsRenum'] = False return if isinstance(value, (tuple, list)): - self._BaseType = tuple(value) + ts._base_type = tuple(value) for v in value: if isinstance(v, t.CStruct): - self.IsStruct = True + kf['IsStruct'] = True elif isinstance(v, t.CEnum): - self.IsEnum = True + kf['IsEnum'] = True elif isinstance(v, t.CUnion): - self.IsUnion = True + kf['IsUnion'] = True elif isinstance(v, t.REnum): - self.IsRenum = True - self.IsEnum = True + kf['IsRenum'] = True + kf['IsEnum'] = True return if isinstance(value, type) and issubclass(value, t.CType): - self._BaseType = value() + ts._base_type = value() return if isinstance(value, t.CType): - self._BaseType = value + ts._base_type = value if isinstance(value, t.CStruct): - self.IsStruct = True - self.IsEnum = False - self.IsUnion = False - self.IsRenum = False + kf['IsStruct'] = True + kf['IsEnum'] = False + kf['IsUnion'] = False + kf['IsRenum'] = False elif isinstance(value, t.REnum): - self.IsRenum = True - self.IsEnum = True - self.IsStruct = False - self.IsUnion = False + kf['IsRenum'] = True + kf['IsEnum'] = True + kf['IsStruct'] = False + kf['IsUnion'] = False elif isinstance(value, t.CEnum): - self.IsEnum = True - self.IsStruct = False - self.IsUnion = False - self.IsRenum = False + kf['IsEnum'] = True + kf['IsStruct'] = False + kf['IsUnion'] = False + kf['IsRenum'] = False elif isinstance(value, t.CUnion): - self.IsUnion = True - self.IsStruct = False - self.IsEnum = False - self.IsRenum = False + kf['IsUnion'] = True + kf['IsStruct'] = False + kf['IsEnum'] = False + kf['IsRenum'] = False return raise TypeError(f"BaseType must be t.CType instance, type subclass, or tuple of t.CType, got {type(value)}") @@ -182,82 +201,92 @@ class CTypeInfo: @property def TypeCls(self): """获取 CType 类(从 BaseType 推断)""" - if self.BaseType: - return type(self.BaseType) - if self.IsStruct: + bt = self._ts._base_type + if bt: + return type(bt) + kf = self._sm._kind_flags + if kf.get('IsStruct'): return t.CStruct - if self.IsEnum: + if kf.get('IsEnum'): return t.CEnum - if self.IsUnion: + if kf.get('IsUnion'): return t.CUnion - if self.IsTypedef: + if kf.get('IsTypedef'): return t._CTypedef return None @property def IsPtr(self) -> bool: - return self.PtrCount > 0 + return self._ts.ptr_count > 0 @property def IsVoid(self) -> bool: - return isinstance(self.BaseType, t.CVoid) + return isinstance(self._ts._base_type, t.CVoid) @property def IsStr(self) -> bool: - return isinstance(self.BaseType, t.CChar) and self.PtrCount > 0 + return isinstance(self._ts._base_type, t.CChar) and self._ts.ptr_count > 0 @property def IsInt(self) -> bool: - return isinstance(self.BaseType, t.CType) and getattr(self.BaseType, 'IsSigned', None) is not None and self.BaseType.IsSigned is True and not self.IsVoid + bt = self._ts._base_type + return isinstance(bt, t.CType) and getattr(bt, 'IsSigned', None) is not None and bt.IsSigned is True and not isinstance(bt, t.CVoid) @property def IsUInt(self) -> bool: - return isinstance(self.BaseType, t.CType) and getattr(self.BaseType, 'IsSigned', None) is False + bt = self._ts._base_type + return isinstance(bt, t.CType) and getattr(bt, 'IsSigned', None) is False @property def IsFloat(self) -> bool: - bt = self.BaseType + bt = self._ts._base_type return isinstance(bt, t.CType) and getattr(bt, 'IsSigned', None) is None and getattr(bt, 'Size', 0) in (32, 64, 128) and not isinstance(bt, t.CVoid) @property def IsDouble(self) -> bool: - return isinstance(self.BaseType, t.CDouble) or (isinstance(self.BaseType, t.CFloat64T)) + bt = self._ts._base_type + return isinstance(bt, t.CDouble) or isinstance(bt, t.CFloat64T) @property def IsPointerToChar(self) -> bool: - return isinstance(self.BaseType, t.CChar) and self.PtrCount > 0 + return isinstance(self._ts._base_type, t.CChar) and self._ts.ptr_count > 0 def ToString(self) -> str: - if self.IsFuncPtr: + ts = self._ts + sm = self._sm + kf = sm._kind_flags + bt = ts._base_type + + if ts.is_func_ptr: return 'Callable' parts = [] - if self.Storage and not isinstance(self.Storage, t.CExport): - parts.append(self.Storage.CName) + if ts.storage and not isinstance(ts.storage, t.CExport): + parts.append(ts.storage.CName) - if self.DataConst or self.DataVolatile: + if ts.data_const or ts.data_volatile: qualifiers = [] - if self.DataConst: + if ts.data_const: qualifiers.append("const") - if self.DataVolatile: + if ts.data_volatile: qualifiers.append("volatile") parts.append("_".join(qualifiers)) - if self.IsTypedef and self.Name: - return self.Name - elif self.IsRenum and self.Name: - base_name = self.Name - elif self.BaseType: - base_name = getattr(self.BaseType, 'CName', None) or (self.BaseType if isinstance(self.BaseType, str) else str(self.BaseType)) + if kf.get('IsTypedef') and sm.name: + return sm.name + elif kf.get('IsRenum') and sm.name: + base_name = sm.name + elif bt: + base_name = getattr(bt, 'CName', None) or (bt if isinstance(bt, str) else str(bt)) else: base_name = "void" - if self.IsArrayPtr: + if ts.is_array_ptr: ptr_str = "" - if self.PtrCount > 0: - ptr_str = "*" * self.PtrCount - if self.ArrayPtr: - inner = self.ArrayPtr.ToString() + if ts.ptr_count > 0: + ptr_str = "*" * ts.ptr_count + if ts.array_ptr: + inner = ts.array_ptr.ToString() if ptr_str: parts.append(f"{base_name} {ptr_str}({inner})") else: @@ -267,22 +296,22 @@ class CTypeInfo: parts.append(f"{base_name} {ptr_str}()") else: parts.append(f"{base_name} ()") - elif self.ArrayPtr: - inner = self.ArrayPtr.ToString() - if self.PtrCount > 0: - parts.append(f"{base_name} {'*' * self.PtrCount}({inner})") + elif ts.array_ptr: + inner = ts.array_ptr.ToString() + if ts.ptr_count > 0: + parts.append(f"{base_name} {'*' * ts.ptr_count}({inner})") else: parts.append(f"{base_name} ({inner})") else: parts.append(base_name) - if self.PtrCount > 0: - parts.append("*" * self.PtrCount) - if self.VarConst: + if ts.ptr_count > 0: + parts.append("*" * ts.ptr_count) + if ts.var_const: parts.append("const") - if self.VarVolatile: + if ts.var_volatile: parts.append("volatile") - for dim in self.ArrayDims: + for dim in ts.array_dims: if dim: parts.append(f"[{dim}]") else: @@ -1098,58 +1127,28 @@ class CTypeInfo: def Copy(self) -> "CTypeInfo": NewInfo = CTypeInfo() - NewInfo.BaseType = self.BaseType - NewInfo.PtrCount = self.PtrCount - NewInfo.VarConst = self.VarConst - NewInfo.VarVolatile = self.VarVolatile - NewInfo.DataConst = self.DataConst - NewInfo.DataVolatile = self.DataVolatile - NewInfo.ArrayDims = list(self.ArrayDims) - NewInfo.Storage = self.Storage - NewInfo.IsFuncPtr = self.IsFuncPtr - NewInfo.FuncPtrParams = list(self.FuncPtrParams) - NewInfo.FuncParamNames = list(self.FuncParamNames) - NewInfo.FuncPtrReturn = self.FuncPtrReturn.Copy() if isinstance(self.FuncPtrReturn, CTypeInfo) else self.FuncPtrReturn - NewInfo.IsBitField = self.IsBitField - NewInfo.BitWidth = self.BitWidth - NewInfo.IsTypedef = self.IsTypedef - NewInfo.IsStruct = self.IsStruct - NewInfo.IsEnum = self.IsEnum - NewInfo.IsUnion = self.IsUnion - NewInfo.IsRenum = self.IsRenum - NewInfo.RenumVariants = list(self.RenumVariants) - NewInfo.Name = self.Name - NewInfo.Members = dict(self.Members) - NewInfo.OriginalType = self.OriginalType.Copy() if isinstance(self.OriginalType, CTypeInfo) else self.OriginalType - NewInfo.DeclaredType = self.DeclaredType - NewInfo.CreturnTypes = list(self.CreturnTypes) - NewInfo.Lineno = self.Lineno - NewInfo.file = self.file - NewInfo.IsAnonymous = self.IsAnonymous - NewInfo.IsCpythonObject = self.IsCpythonObject - NewInfo.IsEnumMember = self.IsEnumMember - NewInfo.IsVariadic = self.IsVariadic - NewInfo.IsVariable = self.IsVariable - NewInfo.IsFunction = self.IsFunction - NewInfo.MetaList = self.MetaList - NewInfo.IsArrayPtr = self.IsArrayPtr - NewInfo.ArrayPtr = self.ArrayPtr.Copy() if self.ArrayPtr else None - NewInfo.IsState = self.IsState - NewInfo.IsDefine = self.IsDefine - NewInfo.DefineValue = self.DefineValue - NewInfo.IsInline = self.IsInline - NewInfo.InlineBody = self.InlineBody - NewInfo.InlineParams = list(self.InlineParams) if self.InlineParams else None - NewInfo._extra = dict(self._extra) + NewInfo._ts = self._ts.copy() + NewInfo._sm = self._sm.copy() + # CTypeInfo 引用字段需要深拷贝 + if isinstance(NewInfo._ts.func_ptr_return, CTypeInfo): + NewInfo._ts.func_ptr_return = NewInfo._ts.func_ptr_return.Copy() + if isinstance(NewInfo._ts.original_type, CTypeInfo): + NewInfo._ts.original_type = NewInfo._ts.original_type.Copy() + if NewInfo._ts.array_ptr: + NewInfo._ts.array_ptr = NewInfo._ts.array_ptr.Copy() + # 实例上的动态属性也需要拷贝(如 IsSigned 等) + for key, val in self.__dict__.items(): + if key not in ('_ts', '_sm'): + object.__setattr__(NewInfo, key, val) return NewInfo def get(self, key, default=None): """获取额外属性""" - return self._extra.get(key, default) + return self._sm._extra.get(key, default) def set(self, key, value): """设置额外属性""" - self._extra[key] = value + self._sm._extra[key] = value @staticmethod def VoidTypeInfo() -> "CTypeInfo": @@ -1173,7 +1172,9 @@ class CTypeInfo: return self.ToString() def __repr__(self) -> str: - return f"CTypeInfo(BaseType={self.BaseType}, PtrCount={self.PtrCount}, IsTypedef={self.IsTypedef}, OriginalType={self.OriginalType!r}, VarConst={self.VarConst}, DataConst={self.DataConst})" + ts = self._ts + kf = self._sm._kind_flags + return f"CTypeInfo(BaseType={ts._base_type}, PtrCount={ts.ptr_count}, IsTypedef={kf.get('IsTypedef', False)}, OriginalType={ts.original_type!r}, VarConst={ts.var_const}, DataConst={ts.data_const})" class CTypeHelper: diff --git a/lib/core/Handles/HandlesClassDef.py b/lib/core/Handles/HandlesClassDef.py index 9c72ecb..f8e4689 100644 --- a/lib/core/Handles/HandlesClassDef.py +++ b/lib/core/Handles/HandlesClassDef.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: from lib.core.translator import Translator from lib.core.Handles.HandlesBase import BaseHandle, CTypeInfo, FuncMeta -from lib.core.SymbolNode import SymbolNode from lib.includes import t import ast import llvmlite.ir as ir @@ -658,13 +657,10 @@ class ClassHandle(BaseHandle): union_type = ir.IdentifiedStructType(Gen.module, ClassName) union_type.set_body(ir.ArrayType(ir.IntType(8), max_size)) Gen.structs[ClassName] = union_type - UnionNode = SymbolNode.CreateClass( - name=ClassName, - TypeKind='union', - lineno=Node.lineno, - file='' - ) - self.Trans.SymbolTable[ClassName] = UnionNode.attributes + UnionNode = CTypeInfo() + UnionNode.Name = ClassName + UnionNode.IsUnion = True + self.Trans.SymbolTable[ClassName] = UnionNode def _EmitREnumLlvm(self, Node, Gen): ClassName = Node.name diff --git a/lib/core/Handles/HandlesExprCall.py b/lib/core/Handles/HandlesExprCall.py index e1f08ef..c4d3913 100644 --- a/lib/core/Handles/HandlesExprCall.py +++ b/lib/core/Handles/HandlesExprCall.py @@ -567,10 +567,18 @@ class ExprCallHandle(BaseHandle): LastPart in ModuleSha1Map) # 最后尝试: 用 FuncAttr 直接查找 Gen.functions(_find_function 会遍历 SHA1 前缀) if FuncAttr and ModulePath and ModulePath not in {'t', 'c'}: + # 先检查 FuncAttr 是否是函数/变量,如果是则跳过 struct 声明 + _attr_sym = self.Trans.SymbolTable.get(FuncAttr) + _is_func_or_var = _attr_sym and (getattr(_attr_sym, 'IsFunction', False) or getattr(_attr_sym, 'IsVariable', False)) + if not _is_func_or_var and ModulePath: + _full_key = f"{ModulePath}.{FuncAttr}" + _full_sym = self.Trans.SymbolTable.get(_full_key) + if _full_sym and (getattr(_full_sym, 'IsFunction', False) or getattr(_full_sym, 'IsVariable', False)): + _is_func_or_var = True # 优先检查 FuncAttr 是否为 struct/类构造器 - if FuncAttr not in Gen.structs: + if not _is_func_or_var and FuncAttr not in Gen.structs: self._ensure_struct_declared(FuncAttr) - if FuncAttr in Gen.structs: + if not _is_func_or_var and FuncAttr in Gen.structs: result = self._HandleClassNewLlvm(Node, FuncAttr) if result is not None: return result @@ -639,6 +647,10 @@ class ExprCallHandle(BaseHandle): def _ensure_struct_declared(self, class_name): Gen = self.Trans.LlvmGen + # 如果名称是函数或变量,不应创建 struct + SymInfo = self.Trans.SymbolTable.get(class_name) + if SymInfo and (getattr(SymInfo, 'IsFunction', False) or getattr(SymInfo, 'IsVariable', False)): + return if class_name in Gen.structs: existing = Gen.structs[class_name] if isinstance(existing, ir.IdentifiedStructType) and (existing.elements is None or len(existing.elements) == 0): diff --git a/lib/core/LLVMCG/BaseGen.py b/lib/core/LLVMCG/BaseGen.py index e944925..5c80522 100644 --- a/lib/core/LLVMCG/BaseGen.py +++ b/lib/core/LLVMCG/BaseGen.py @@ -190,6 +190,10 @@ class BaseGenMixin: return ir.IntType(32) if hasattr(Entry, 'IsExceptionClass') and Entry.IsExceptionClass: return ir.IntType(32) + if hasattr(Entry, 'IsFunction') and Entry.IsFunction: + return ir.PointerType(ir.IntType(8)) + if hasattr(Entry, 'IsVariable') and Entry.IsVariable: + return ir.PointerType(ir.IntType(8)) if hasattr(Entry, 'BaseType'): from lib.includes import t as _t if isinstance(Entry.BaseType, type) and issubclass(Entry.BaseType, _t.CEnum): diff --git a/lib/core/LLVMCG/FuncGen.py b/lib/core/LLVMCG/FuncGen.py index faadbf2..8f77325 100644 --- a/lib/core/LLVMCG/FuncGen.py +++ b/lib/core/LLVMCG/FuncGen.py @@ -2,6 +2,7 @@ from __future__ import annotations import ast import os import llvmlite.ir as ir +from lib.core.Handles.HandlesBase import CTypeInfo class FuncGenMixin: @@ -9,6 +10,9 @@ class FuncGenMixin: def setup_from_symbol_table(self, SymbolTable): self.SymbolTable = SymbolTable for name, info in SymbolTable.items(): + if isinstance(info, CTypeInfo): + # CTypeInfo 对象:struct/union 由 StructGen 处理,此处只处理 dict 格式 + continue if not isinstance(info, dict): if hasattr(info, 'get'): info = dict(info) if hasattr(info, '__iter__') else {} @@ -25,7 +29,7 @@ class FuncGenMixin: if isinstance(MemberInfo, dict): MemberType = self._type_str_to_llvm(MemberInfo.get('type', 'int'), MemberInfo.get('IsPtr', False)) self.class_members[ClassName].append((MemberName, MemberType)) - elif isinstance(MemberInfo, _CTypeInfo): + elif isinstance(MemberInfo, CTypeInfo): MemberType = self._ctype_to_llvm(MemberInfo) if MemberType is None: MemberType = self._type_str_to_llvm(MemberInfo.ToString(), MemberInfo.IsPtr) diff --git a/lib/core/SymbolNode.py b/lib/core/SymbolNode.py index d32e497..3ef6a7e 100644 --- a/lib/core/SymbolNode.py +++ b/lib/core/SymbolNode.py @@ -79,8 +79,31 @@ class SymbolNode: 'type': self.type, 'lineno': self.lineno, 'file': self.file, - **self.attributes.entry } + # 序列化 CTypeInfo 属性 + attrs = self.attributes + if attrs.BaseType: + result['BaseType'] = str(attrs.BaseType) + if attrs.PtrCount: + result['PtrCount'] = attrs.PtrCount + if attrs.IsTypedef: + result['IsTypedef'] = True + if attrs.IsStruct: + result['IsStruct'] = True + if attrs.IsEnum: + result['IsEnum'] = True + if attrs.IsUnion: + result['IsUnion'] = True + if attrs.IsFunction: + result['IsFunction'] = True + if attrs.IsVariable: + result['IsVariable'] = True + if attrs.IsDefine: + result['IsDefine'] = True + if attrs.OriginalType: + result['OriginalType'] = str(attrs.OriginalType) + if attrs._sm._extra: + result.update(attrs._sm._extra) if self.children: result['children'] = {name: child.ToDict() for name, child in self.children.items()} @@ -118,7 +141,7 @@ class SymbolNode: node.attributes.Lineno = lineno else: if TypeName is not None: - node.attributes.BaseType = CTypeInfo.create_FromTypeName(TypeName) + node.attributes.BaseType = CTypeInfo.CreateFromTypeName(TypeName) if IsPtr: node.attributes.PtrCount = 1 if dims: @@ -158,7 +181,7 @@ class SymbolNode: CTypeMember.PtrCount = max(CTypeMember.PtrCount, 1) node.attributes.Members[MemberName] = CTypeMember if TypeKind == 'struct': - node.attributes.is_struct = True + node.attributes.IsStruct = True elif TypeKind == 'enum': node.attributes.IsEnum = True elif TypeKind == 'union': @@ -198,7 +221,7 @@ class SymbolNode: if IsUnion: node.attributes.IsUnion = True else: - node.attributes.is_struct = True + node.attributes.IsStruct = True return node @classmethod diff --git a/lib/core/SymbolTable.py b/lib/core/SymbolTable.py index 8358bf3..c6626c4 100644 --- a/lib/core/SymbolTable.py +++ b/lib/core/SymbolTable.py @@ -2,7 +2,6 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from lib.core.translator import Translator -from lib.core.SymbolNode import SymbolNode from lib.core.Handles.HandlesBase import CTypeInfo, CTypeHelper from lib.includes import t from typing import Any, Dict, Iterator @@ -45,81 +44,167 @@ def _AnnotationContainsTType(node, TypeName: str) -> bool: return False -class SymbolTable: - def __init__(self, translator: "Translator"): - self.translator = translator - self._root = SymbolNode(name='root', NodeType='root') - - def clear(self): - self._root = SymbolNode(name='root', NodeType='root') - - def get(self, name: str, default=None) -> CTypeInfo: - node = self._FindNode(name) - if node: - return node.attributes - return default - - def set(self, name: str, value: Any): - self._InsertNode(name, value) - self._cached_len = -1 - - def update(self, symbols: Dict[str, Any]): - for name, value in symbols.items(): - self.set(name, value) - - def keys(self) -> Iterator[str]: - return self._CollectKeys(self._root) - - def values(self) -> Iterator[CTypeInfo]: - for node in self._CollectNodes(self._root): - yield node.attributes - - def items(self) -> Iterator[tuple[str, CTypeInfo]]: - for node in self._CollectNodes(self._root): - yield node.name, node.attributes - - def pop(self, name: str, *args) -> CTypeInfo: - node = self._FindNode(name) - if node and node.parent: - node.parent.RemoveChild(node.name) - return node.attributes - if args: - return args[0] - raise KeyError(name) - - def __getitem__(self, name: str) -> CTypeInfo: - node = self._FindNode(name) - if node: - return node.attributes - raise KeyError(name) - - def __setitem__(self, name: str, value: Any): - self.set(name, value) - - def __delitem__(self, name: str): - node = self._FindNode(name) - if node and node.parent: - node.parent.RemoveChild(node.name) - self._cached_len = -1 - else: - raise KeyError(name) - - def __contains__(self, name: str) -> bool: - return self._FindNode(name) is not None - - def __len__(self) -> int: - if not hasattr(self, '_cached_len') or self._cached_len < 0: - self._cached_len = sum(1 for _ in self._CollectNodes(self._root)) - return self._cached_len - - def __iter__(self) -> Iterator[str]: - return self.keys() - - def ToDict(self) -> Dict[str, Any]: - return self._root.ToDict() - - def FromDict(self, symbols: Dict[str, Any]): - self._root = SymbolNode.FromDict('root', symbols) +class SymbolTable: + def __init__(self, translator: "Translator"): + self.translator = translator + self._symbols: Dict[str, CTypeInfo] = {} + + def clear(self): + self._symbols.clear() + + def get(self, name: str, default=None) -> CTypeInfo: + return self._symbols.get(name, default) + + def set(self, name: str, value: Any): + if isinstance(value, CTypeInfo): + self._symbols[name] = value + else: + # 兼容旧代码传入 dict 的情况 + info = self._CTypeInfoFromDict(name, value) + self._symbols[name] = info + + def update(self, symbols: Dict[str, Any]): + for name, value in symbols.items(): + self.set(name, value) + + def keys(self) -> Iterator[str]: + return iter(self._symbols.keys()) + + def values(self) -> Iterator[CTypeInfo]: + return iter(self._symbols.values()) + + def items(self) -> Iterator[tuple[str, CTypeInfo]]: + return iter(self._symbols.items()) + + def pop(self, name: str, *args) -> CTypeInfo: + return self._symbols.pop(name, *args) + + def __getitem__(self, name: str) -> CTypeInfo: + if name in self._symbols: + return self._symbols[name] + raise KeyError(name) + + def __setitem__(self, name: str, value: Any): + self.set(name, value) + + def __delitem__(self, name: str): + del self._symbols[name] + + def __contains__(self, name: str) -> bool: + return name in self._symbols + + def __len__(self) -> int: + return len(self._symbols) + + def __iter__(self) -> Iterator[str]: + return iter(self._symbols) + + def ToDict(self) -> Dict[str, Any]: + """序列化为字典格式""" + result = {} + for name, info in self._symbols.items(): + entry = {'name': name} + if info.BaseType: + entry['BaseType'] = str(info.BaseType) + if info.PtrCount: + entry['PtrCount'] = info.PtrCount + if info.IsTypedef: + entry['IsTypedef'] = True + if info.IsStruct: + entry['IsStruct'] = True + if info.IsEnum: + entry['IsEnum'] = True + if info.IsUnion: + entry['IsUnion'] = True + if info.IsFunction: + entry['IsFunction'] = True + if info.IsVariable: + entry['IsVariable'] = True + if info.IsDefine: + entry['IsDefine'] = True + if info.OriginalType: + entry['OriginalType'] = str(info.OriginalType) + if info.Lineno: + entry['lineno'] = info.Lineno + if info.file: + entry['file'] = info.file + if info.Members: + entry['members'] = info.Members + extra = info._sm._extra + if extra: + entry.update(extra) + result[name] = entry + return result + + def FromDict(self, symbols: Dict[str, Any]): + """从字典格式反序列化""" + self._symbols.clear() + for name, attrs in symbols.items(): + if isinstance(attrs, dict): + info = self._CTypeInfoFromDict(name, attrs) + self._symbols[name] = info + elif isinstance(attrs, CTypeInfo): + self._symbols[name] = attrs + + def _CTypeInfoFromDict(self, name: str, attrs: dict) -> CTypeInfo: + """从旧 dict 格式创建 CTypeInfo(兼容旧代码)""" + info = CTypeInfo() + info.Name = name + node_type = attrs.get('type', '') + + if node_type == 'struct' or attrs.get('IsStruct'): + info.IsStruct = True + elif node_type == 'enum' or attrs.get('IsEnum'): + info.IsEnum = True + elif node_type == 'union' or attrs.get('IsUnion'): + info.IsUnion = True + elif node_type == 'typedef' or attrs.get('IsTypedef'): + info.IsTypedef = True + elif node_type == 'function' or attrs.get('IsFunction'): + info.IsFunction = True + elif node_type == 'variable' or attrs.get('IsVariable'): + info.IsVariable = True + elif node_type == 'define' or attrs.get('IsDefine'): + info.IsDefine = True + elif node_type == 'enum_member' or attrs.get('IsEnumMember'): + info.IsEnumMember = True + + if 'PtrCount' in attrs: + info.PtrCount = attrs['PtrCount'] + if 'OriginalType' in attrs: + info.OriginalType = attrs['OriginalType'] + if 'lineno' in attrs: + info.Lineno = attrs['lineno'] + if 'file' in attrs: + info.file = attrs['file'] + if 'members' in attrs: + info.Members = attrs['members'] + if 'IsPtr' in attrs: + info.IsPtr = attrs['IsPtr'] + if 'dims' in attrs: + info.ArrayDims = attrs['dims'] + if 'IsCpythonObject' in attrs: + info.IsCpythonObject = attrs['IsCpythonObject'] + if 'IsAnonymous' in attrs: + info.IsAnonymous = attrs['IsAnonymous'] + if 'IsPacked' in attrs: + info.IsPacked = attrs['IsPacked'] + if 'EnumName' in attrs: + info.EnumName = attrs['EnumName'] + if 'DefineValue' in attrs: + info.DefineValue = attrs['DefineValue'] + + # 其他属性存入 _extra + skip_keys = {'type', 'PtrCount', 'OriginalType', 'lineno', 'file', + 'members', 'IsPtr', 'dims', 'IsCpythonObject', 'IsAnonymous', + 'IsPacked', 'EnumName', 'DefineValue', + 'IsStruct', 'IsEnum', 'IsUnion', 'IsTypedef', + 'IsFunction', 'IsVariable', 'IsDefine', 'IsEnumMember'} + for key, value in attrs.items(): + if key not in skip_keys: + info.set(key, value) + + return info def LoadModuleSymbols(self, FullModulePath: str, asname: str, lineno: int = 0) -> list[str]: return self._LoadSymbolsFromFile(FullModulePath, asname, lineno) @@ -693,102 +778,70 @@ class SymbolTable: return '' def _InsertClassSymbol(self, FullName: str, TypeKind: str, lineno: int, FilePath: str, members: dict, IsCpythonObject: bool, IsPacked: bool = False): - parts = FullName.split('.') - current = self._root + info = CTypeInfo() + info.Lineno = lineno + info.file = FilePath + info.Members = members if members else {} - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) + if TypeKind == 'struct': + info.IsStruct = True + elif TypeKind == 'union': + info.IsUnion = True + elif TypeKind == 'enum': + info.IsEnum = True + elif TypeKind == 'exception': + info.IsStruct = True + info.IsExceptionClass = True - LastPart = parts[-1] - node = SymbolNode.CreateClass( - name=LastPart, - TypeKind=TypeKind, - members=members, - lineno=lineno, - file=FilePath, - IsCpythonObject=IsCpythonObject, - IsPacked=IsPacked - ) - current.AddChild(node) + if IsCpythonObject: + info.IsCpythonObject = True + if IsPacked: + info.IsPacked = True + + self._symbols[FullName] = info def _InsertEnumMemberSymbol(self, FullName: str, EnumName: str, lineno: int, FilePath: str): - from lib.core.Handles.HandlesBase import CTypeInfo - parts = FullName.split('.') - current = self._root - - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] info = CTypeInfo() info.IsEnumMember = True info.EnumName = EnumName info.Lineno = lineno info.file = FilePath - node = SymbolNode(name=LastPart, NodeType='enum_member') - node.attributes = info - current.AddChild(node) - + self._symbols[FullName] = info + def _InsertTypedefSymbol(self, FullName: str, OriginalType_kind: str | None, OriginalClass, lineno: int, FilePath: str, members: dict | None = None): - parts = FullName.split('.') - current = self._root + info = CTypeInfo() + info.IsTypedef = True + info.Lineno = lineno + info.file = FilePath + if members: + info.Members = members - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] if isinstance(OriginalClass, CTypeInfo): - OriginalType = OriginalClass + info.OriginalType = OriginalClass elif OriginalType_kind == 'typedef' and OriginalClass and isinstance(OriginalClass, str) and ('*' in OriginalClass): OriginalType = OriginalClass if OriginalType == 'CVoid *': OriginalType = 'void *' + info.OriginalType = OriginalType elif OriginalType_kind == 'typedef' and OriginalClass == 'void': - OriginalType = 'void *' + info.OriginalType = 'void *' elif OriginalType_kind == 'typedef' and OriginalClass: - OriginalType = OriginalClass + info.OriginalType = OriginalClass elif OriginalType_kind and OriginalClass and isinstance(OriginalClass, str): - OriginalType = f'{OriginalType_kind} {OriginalClass}' + info.OriginalType = f'{OriginalType_kind} {OriginalClass}' else: - OriginalType = OriginalClass - node = SymbolNode.CreateTypedef( - name=LastPart, - OriginalType=OriginalType, - members=members, - lineno=lineno, - file=FilePath - ) - current.AddChild(node) + info.OriginalType = OriginalClass + + self._symbols[FullName] = info def _InsertModuleSymbol(self, name: str, lineno: int, FilePath: str): - node = SymbolNode.CreateModule( - name=name, - lineno=lineno, - file=FilePath - ) - self._root.AddChild(node) + info = CTypeInfo() + info.IsModuleAlias = True + info.Lineno = lineno + info.file = FilePath + self._symbols[name] = info def _InsertFuncSymbol(self, FullName: str, RetType, ParamTypes: list, lineno: int, FilePath: str, IsVariadic: bool = False, IsInline: bool = False): - parts = FullName.split('.') - current = self._root - - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] - from lib.core.Handles.HandlesBase import CTypeInfo info = CTypeInfo() info.IsFunction = True if isinstance(RetType, str): @@ -804,30 +857,15 @@ class SymbolTable: info.Storage = t.CInline() info.Lineno = lineno info.file = FilePath - node = SymbolNode(name=LastPart, NodeType='function') - node.attributes = info - current.AddChild(node) + self._symbols[FullName] = info def _InsertDefineSymbol(self, FullName: str, DefineValue, lineno: int, FilePath: str): - parts = FullName.split('.') - current = self._root - - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] - from lib.core.Handles.HandlesBase import CTypeInfo info = CTypeInfo() info.IsDefine = True info.DefineValue = DefineValue info.Lineno = lineno info.file = FilePath - node = SymbolNode(name=LastPart, NodeType='define') - node.attributes = info - current.AddChild(node) + self._symbols[FullName] = info def _eval_const_expr(self, node): """计算常量表达式的值""" @@ -882,117 +920,15 @@ class SymbolTable: return None def _InsertAnonymousSymbol(self, FullName: str, IsUnion: bool, members: dict, lineno: int, FilePath: str): - parts = FullName.split('.') - current = self._root - - for i, part in enumerate(parts[:-1]): - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] - node = SymbolNode.CreateAnonymous( - name=LastPart, - IsUnion=IsUnion, - members=members, - lineno=lineno, - file=FilePath - ) - current.AddChild(node) - - def _FindNode(self, name: str) -> SymbolNode | None: - if '.' not in name: - return self._root.GetChild(name) - - parts = name.split('.') - current = self._root - - for part in parts: - if current.HasChild(part): - current = current.GetChild(part) - else: - return None - - return current - - def _InsertNode(self, name: str, attributes: dict | "CTypeInfo"): - from lib.core.Handles.HandlesBase import CTypeInfo - parts = name.split('.') - current = self._root - - for part in parts[:-1]: - if not current.HasChild(part): - node = SymbolNode(name=part, NodeType='namespace') - current.AddChild(node) - current = current.GetChild(part) - - LastPart = parts[-1] - - if isinstance(attributes, CTypeInfo): - node = SymbolNode(name=LastPart, NodeType='type', lineno=attributes.Lineno or 0) - node.attributes = attributes - current.AddChild(node) - return - - NodeType = attributes.get('type', 'unknown') - - # 根据节点类型使用相应的工厂函数 - if NodeType == 'member': - node = SymbolNode.CreateMember( - name=LastPart, - TypeName=attributes.get('type', ''), - IsPtr=attributes.get('IsPtr', False), - dims=attributes.get('dims', []), - lineno=attributes.get('lineno', 0), - file=attributes.get('file', '') - ) - elif NodeType == 'typedef': - node = SymbolNode.CreateTypedef( - name=LastPart, - OriginalType=attributes.get('OriginalType', ''), - members=attributes.get('members', None), - lineno=attributes.get('lineno', 0), - file=attributes.get('file', '') - ) - elif NodeType == 'module': - node = SymbolNode.CreateModule( - name=LastPart, - lineno=attributes.get('lineno', 0), - file=attributes.get('file', '') - ) - elif attributes.get('IsAnonymous'): - node = SymbolNode.CreateAnonymous( - name=LastPart, - IsUnion=NodeType == 'union', - members=attributes.get('members', {}), - lineno=attributes.get('lineno', 0), - file=attributes.get('file', '') - ) + info = CTypeInfo() + if IsUnion: + info.IsUnion = True else: - # 其他类型(struct, union, enum, function, variable 等) - node = SymbolNode.CreateClass( - name=LastPart, - TypeKind=NodeType, - members=attributes.get('members', None), - lineno=attributes.get('lineno', 0), - file=attributes.get('file', ''), - IsCpythonObject=attributes.get('IsCpythonObject', False) - ) - - # 设置其他属性 - for key, value in attributes.items(): - if key not in ('type', 'lineno', 'file', 'members', 'IsCpythonObject', 'IsAnonymous'): - node.set(key, value) - - current.AddChild(node) + info.IsStruct = True + info.IsAnonymous = True + info.Members = members if members else {} + info.Lineno = lineno + info.file = FilePath + self._symbols[FullName] = info - def _CollectKeys(self, node: SymbolNode) -> Iterator[str]: - for name, child in node.children.items(): - yield child.name - yield from self._CollectKeys(child) - - def _CollectNodes(self, node: SymbolNode) -> Iterator[SymbolNode]: - for child in node.children.values(): - yield child - yield from self._CollectNodes(child) + diff --git a/lib/core/Translator/AnnotationLoader.py b/lib/core/Translator/AnnotationLoader.py index 91dec3d..8d17636 100644 --- a/lib/core/Translator/AnnotationLoader.py +++ b/lib/core/Translator/AnnotationLoader.py @@ -4,7 +4,6 @@ import ast import sys import os -from lib.core.SymbolNode import SymbolNode from lib.core.Handles.HandlesBase import CTypeInfo from lib.includes import t @@ -48,28 +47,25 @@ class AnnotationLoaderMixin: # 优先检查是否是 CEnum 子类(枚举) if isinstance(attr, type) and issubclass(attr, CEnum) and attr is not CEnum: # 注册枚举类型 - EnumNode = SymbolNode.CreateClass( - name=AttrName, - TypeKind='enum', - lineno=0 - ) + EnumNode = CTypeInfo() + EnumNode.Name = AttrName + EnumNode.BaseType = t.CEnum() + EnumNode.IsEnum = True EnumNode.set('enum_class', attr) EnumNode.set('source', 'annotation_module') - EnumNode.set('library_name', lib_name) - EnumNode.set('file', source_file) - self.SymbolTable[AttrName] = EnumNode.attributes + EnumNode.library_name = lib_name + EnumNode.file = source_file + self.SymbolTable[AttrName] = EnumNode if lib_name: FullName = f'{lib_name}.{AttrName}' - full_EnumNode = SymbolNode.CreateClass( - name=FullName, - TypeKind='enum', - lineno=0 - ) + full_EnumNode = CTypeInfo() + full_EnumNode.Name = FullName + full_EnumNode.IsEnum = True full_EnumNode.set('enum_class', attr) full_EnumNode.set('source', 'annotation_module') - full_EnumNode.set('library_name', lib_name) - full_EnumNode.set('file', source_file) - self.SymbolTable[FullName] = full_EnumNode.attributes + full_EnumNode.library_name = lib_name + full_EnumNode.file = source_file + self.SymbolTable[FullName] = full_EnumNode # 枚举成员也需要注册 for MemberName in dir(attr): if not MemberName.startswith('_'): @@ -98,27 +94,23 @@ class AnnotationLoaderMixin: else: FullName = AttrName # 同时注册带前缀和不带前缀的名称(都是 typedef 别名) - TypedefNode = SymbolNode.CreateClass( - name=AttrName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', attr().CName) + TypedefNode = CTypeInfo() + TypedefNode.Name = AttrName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = attr().CName TypedefNode.set('source', 'annotation_module') - TypedefNode.set('library_name', lib_name) - TypedefNode.set('file', source_file) - self.SymbolTable[AttrName] = TypedefNode.attributes + TypedefNode.library_name = lib_name + TypedefNode.file = source_file + self.SymbolTable[AttrName] = TypedefNode if lib_name and FullName != AttrName: - FullTypedef_node = SymbolNode.CreateClass( - name=FullName, - TypeKind='typedef', - lineno=0 - ) - FullTypedef_node.set('OriginalType', attr().CName) + FullTypedef_node = CTypeInfo() + FullTypedef_node.Name = FullName + FullTypedef_node.IsTypedef = True + FullTypedef_node.OriginalType = attr().CName FullTypedef_node.set('source', 'annotation_module') - FullTypedef_node.set('library_name', lib_name) - FullTypedef_node.set('file', source_file) - self.SymbolTable[FullName] = FullTypedef_node.attributes + FullTypedef_node.library_name = lib_name + FullTypedef_node.file = source_file + self.SymbolTable[FullName] = FullTypedef_node count += 1 # 检查是否是下划线前缀的 CType 子类(如 _CTypedef -> CTypedef) elif AttrName.startswith('_') and len(AttrName) > 1: @@ -132,27 +124,23 @@ class AnnotationLoaderMixin: FullName = f'{lib_name}.{PublicName}' else: FullName = PublicName - TypedefNode = SymbolNode.CreateClass( - name=PublicName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', attr().CName) + TypedefNode = CTypeInfo() + TypedefNode.Name = PublicName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = attr().CName TypedefNode.set('source', 'annotation_module') - TypedefNode.set('library_name', lib_name) - TypedefNode.set('file', source_file) - self.SymbolTable[PublicName] = TypedefNode.attributes + TypedefNode.library_name = lib_name + TypedefNode.file = source_file + self.SymbolTable[PublicName] = TypedefNode if lib_name and FullName != PublicName: - FullTypedef_node = SymbolNode.CreateClass( - name=FullName, - TypeKind='typedef', - lineno=0 - ) - FullTypedef_node.set('OriginalType', attr().CName) + FullTypedef_node = CTypeInfo() + FullTypedef_node.Name = FullName + FullTypedef_node.IsTypedef = True + FullTypedef_node.OriginalType = attr().CName FullTypedef_node.set('source', 'annotation_module') - FullTypedef_node.set('library_name', lib_name) - FullTypedef_node.set('file', source_file) - self.SymbolTable[FullName] = FullTypedef_node.attributes + FullTypedef_node.library_name = lib_name + FullTypedef_node.file = source_file + self.SymbolTable[FullName] = FullTypedef_node count += 1 return count @@ -221,15 +209,13 @@ class AnnotationLoaderMixin: # 这个类继承自 CType,是 typedef 别名 # 更新符号表中的类型为 typedef if ClassName in self.SymbolTable: - TypedefNode = SymbolNode.CreateClass( - name=ClassName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', self.SymbolTable[ClassName].get('OriginalType', f'struct {ClassName}')) + TypedefNode = CTypeInfo() + TypedefNode.Name = ClassName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = self.SymbolTable[ClassName].get('OriginalType', f'struct {ClassName}') TypedefNode.set('source', 'annotation_module') TypedefNode.set('is_ctype_subclass', True) - self.SymbolTable[ClassName] = TypedefNode.attributes + self.SymbolTable[ClassName] = TypedefNode except Exception as _e: from lib.core.VLogger import get_logger as _vlog from lib.constants.config import mode as _ConfigMode @@ -332,11 +318,9 @@ class AnnotationLoaderMixin: if orig_with_prefix in self.SymbolTable: # 添加带前缀的 typedef 别名 FullTypedef_name = f'{TypePrefix}.{TargetName}' - TypedefNode = SymbolNode.CreateClass( - name=FullTypedef_name, - TypeKind='typedef', - lineno=0 - ) + TypedefNode = CTypeInfo() + TypedefNode.Name = FullTypedef_name + TypedefNode.IsTypedef = True orig_entry = self.SymbolTable.get(orig_with_prefix, {}) orig_type_str = f'struct {original_name}' if isinstance(orig_entry, dict): @@ -348,10 +332,10 @@ class AnnotationLoaderMixin: orig_type_str = getattr(orig_entry, 'OriginalType', f'struct {original_name}') elif hasattr(orig_entry, 'IsEnum') and orig_entry.IsEnum: orig_type_str = f'enum {original_name}' - TypedefNode.set('OriginalType', orig_type_str) + TypedefNode.OriginalType = orig_type_str TypedefNode.set('source', 'annotation_module') TypedefNode.set('original_name', TargetName) - self.SymbolTable[FullTypedef_name] = TypedefNode.attributes + self.SymbolTable[FullTypedef_name] = TypedefNode count += 1 self.AnnotationModules.add(lib_name) diff --git a/lib/core/Translator/LlvmGenerator.py b/lib/core/Translator/LlvmGenerator.py index a56d18a..294bea0 100644 --- a/lib/core/Translator/LlvmGenerator.py +++ b/lib/core/Translator/LlvmGenerator.py @@ -6,7 +6,6 @@ import re import llvmlite.ir as ir from lib.core.LlvmCodeGenerator import LlvmCodeGenerator -from lib.core.SymbolNode import SymbolNode from lib.core.Handles.HandlesBase import CTypeInfo from lib.includes import t from lib.constants.config import mode as _config_mode @@ -368,15 +367,13 @@ class LlvmGeneratorMixin: if IsTypedef: TypedefKey = TypedefName if TypedefName else ClassName - TypedefNode = SymbolNode.CreateClass( - name=TypedefKey, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', f'struct {ClassName}') + TypedefNode = CTypeInfo() + TypedefNode.Name = TypedefKey + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = f'struct {ClassName}' TypedefNode.set('IsComplete', True) - TypedefNode.set('file', '') - self.SymbolTable[TypedefKey] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[TypedefKey] = TypedefNode for item in Node.body: if isinstance(item, ast.AnnAssign) and isinstance(item.target, ast.Name): @@ -412,27 +409,23 @@ class LlvmGeneratorMixin: self.LogWarning(f"异常被忽略: {_e}") if not IsTypedef: - StructNode = SymbolNode.CreateClass( - name=ClassName, - TypeKind='struct', - members=members, - lineno=0 - ) - StructNode.set('file', '') + StructNode = CTypeInfo() + StructNode.Name = ClassName + StructNode.IsStruct = True + StructNode.Members = members or {} + StructNode.file = '' if ClassName in self.SymbolTable: existing = self.SymbolTable[ClassName] if hasattr(existing, 'IsCpythonObject') and existing.IsCpythonObject: - StructNode.set('IsCpythonObject', True) - self.SymbolTable[ClassName] = StructNode.attributes + StructNode.IsCpythonObject = True + self.SymbolTable[ClassName] = StructNode elif isinstance(Node, ast.FunctionDef): FuncName = Node.name - FuncNode = SymbolNode.CreateClass( - name=FuncName, - TypeKind='function', - lineno=0 - ) - FuncNode.set('file', '') - self.SymbolTable[FuncName] = FuncNode.attributes + FuncNode = CTypeInfo() + FuncNode.Name = FuncName + FuncNode.IsFunction = True + FuncNode.file = '' + self.SymbolTable[FuncName] = FuncNode elif isinstance(Node, ast.AnnAssign): if isinstance(Node.target, ast.Name): VarName = Node.target.id @@ -470,39 +463,33 @@ class LlvmGeneratorMixin: else: actual_type = 'struct' if actual_type == 'enum': - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', f'enum {OriginalType}') - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = f'enum {OriginalType}' + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode elif actual_type == 'typedef': - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True if isinstance(OriginalInfo, dict): - TypedefNode.set('OriginalType', OriginalInfo.get('OriginalType', f'struct {OriginalType}')) + TypedefNode.OriginalType = OriginalInfo.get('OriginalType', f'struct {OriginalType}') elif isinstance(OriginalInfo, CTypeInfo) and OriginalInfo.OriginalType: - TypedefNode.set('OriginalType', OriginalInfo.OriginalType) + TypedefNode.OriginalType = OriginalInfo.OriginalType else: - TypedefNode.set('OriginalType', f'struct {OriginalType}') + TypedefNode.OriginalType = f'struct {OriginalType}' TypedefNode.set('PendingTypedef', True) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode else: - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', f'struct {OriginalType}') + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = f'struct {OriginalType}' TypedefNode.set('PendingTypedef', True) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode self.GeneratedTypes.add(VarName) continue else: @@ -522,48 +509,42 @@ class LlvmGeneratorMixin: else: actual_type = 'struct' if actual_type == 'typedef': - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True if isinstance(OriginalInfo, dict): - TypedefNode.set('OriginalType', OriginalInfo.get('OriginalType', f'struct {OriginalType}')) + TypedefNode.OriginalType = OriginalInfo.get('OriginalType', f'struct {OriginalType}') elif isinstance(OriginalInfo, CTypeInfo) and OriginalInfo.OriginalType: - TypedefNode.set('OriginalType', OriginalInfo.OriginalType) + TypedefNode.OriginalType = OriginalInfo.OriginalType else: - TypedefNode.set('OriginalType', f'struct {OriginalType}') + TypedefNode.OriginalType = f'struct {OriginalType}' TypedefNode.set('PendingTypedef', True) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode self.GeneratedTypes.add(VarName) if isinstance(OriginalInfo, dict): OriginalInfo['skip_generation'] = True continue elif actual_type == 'struct': - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', f'struct {OriginalType}') + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = f'struct {OriginalType}' TypedefNode.set('PendingTypedef', True) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode self.GeneratedTypes.add(VarName) if isinstance(OriginalInfo, dict): OriginalInfo['skip_generation'] = True continue elif actual_type == 'enum': - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', f'enum {OriginalType}') + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = f'enum {OriginalType}' TypedefNode.set('PendingTypedef', True) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode self.GeneratedTypes.add(VarName) if isinstance(OriginalInfo, dict): OriginalInfo['skip_generation'] = True @@ -572,14 +553,12 @@ class LlvmGeneratorMixin: from lib.core.Handles.HandlesBase import CTypeHelper CName = CTypeHelper.GetCName(Node.value.attr) if CName: - TypedefNode = SymbolNode.CreateClass( - name=VarName, - TypeKind='typedef', - lineno=0 - ) - TypedefNode.set('OriginalType', CName) - TypedefNode.set('file', '') - self.SymbolTable[VarName] = TypedefNode.attributes + TypedefNode = CTypeInfo() + TypedefNode.Name = VarName + TypedefNode.IsTypedef = True + TypedefNode.OriginalType = CName + TypedefNode.file = '' + self.SymbolTable[VarName] = TypedefNode self.GeneratedTypes.add(VarName) continue @@ -590,14 +569,12 @@ class LlvmGeneratorMixin: except Exception as _e: if __import__('lib.constants.config', fromlist=['mode']).mode == "strict": self.LogWarning(f"异常被忽略: {_e}") - var_node = SymbolNode.CreateClass( - name=VarName, - TypeKind='variable', - lineno=0 - ) - var_node.set('IsPtr', IsPtr) - var_node.set('file', '') - self.SymbolTable[VarName] = var_node.attributes + var_node = CTypeInfo() + var_node.Name = VarName + var_node.IsVariable = True + var_node.PtrCount = 1 if IsPtr else 0 + var_node.file = '' + self.SymbolTable[VarName] = var_node self.LlvmGen = LlvmCodeGenerator( triple=getattr(self, 'triple', None), diff --git a/lib/core/Translator/PythonParser.py b/lib/core/Translator/PythonParser.py index 2dcea13..23a09f5 100644 --- a/lib/core/Translator/PythonParser.py +++ b/lib/core/Translator/PythonParser.py @@ -7,7 +7,6 @@ import json import struct from lib.utils.helpers import DetectFileType -from lib.core.SymbolNode import SymbolNode from lib.core.Handles.HandlesBase import CTypeInfo from lib.includes import t from lib.constants.config import mode as _ConfigMode @@ -325,13 +324,11 @@ class PythonParserMixin: if IsCenum: # 注册为 enum 类型 - EnumNode = SymbolNode.CreateClass( - name=ClassName, - TypeKind='enum', - lineno=0 - ) + EnumNode = CTypeInfo() + EnumNode.Name = ClassName + EnumNode.IsEnum = True EnumNode.set('file', '') - self.SymbolTable[ClassName] = EnumNode.attributes + self.SymbolTable[ClassName] = EnumNode # 注册 enum 成员 for item in node.body: @@ -393,25 +390,21 @@ class PythonParserMixin: if _ConfigMode == "strict": raise _vlog().warning(f"解析结构体成员失败: {_e}", "Exception") - StructNode = SymbolNode.CreateClass( - name=ClassName, - TypeKind='struct', - members=members, - lineno=0, - IsCpythonObject=IsCpythonObject - ) + StructNode = CTypeInfo() + StructNode.Name = ClassName + StructNode.IsStruct = True + StructNode.Members = members or {} StructNode.set('file', '') StructNode.set('IsAnonymous', IsAnonymous) - self.SymbolTable[ClassName] = StructNode.attributes + StructNode.set('IsCpythonObject', IsCpythonObject) + self.SymbolTable[ClassName] = StructNode elif isinstance(node, ast.FunctionDef): FuncName = node.name - FuncNode = SymbolNode.CreateClass( - name=FuncName, - TypeKind='function', - lineno=0 - ) + FuncNode = CTypeInfo() + FuncNode.Name = FuncName + FuncNode.IsFunction = True FuncNode.set('file', '') - self.SymbolTable[FuncName] = FuncNode.attributes + self.SymbolTable[FuncName] = FuncNode elif isinstance(node, ast.AnnAssign): if isinstance(node.target, ast.Name): VarName = node.target.id @@ -445,14 +438,12 @@ class PythonParserMixin: if _ConfigMode == "strict": raise _vlog().warning(f"获取类型信息失败(ParsePythonFile): {_e}", "Exception") - var_node = SymbolNode.CreateClass( - name=VarName, - TypeKind='variable', - lineno=0 - ) + var_node = CTypeInfo() + var_node.Name = VarName + var_node.IsVariable = True var_node.set('IsPtr', IsPtr) var_node.set('file', '') - self.SymbolTable[VarName] = var_node.attributes + self.SymbolTable[VarName] = var_node except Exception as e: print(f'Warning: Failed to parse Python file {FilePath}: {e}') diff --git a/lib/core/TypeSpec.py b/lib/core/TypeSpec.py new file mode 100644 index 0000000..ec741fe --- /dev/null +++ b/lib/core/TypeSpec.py @@ -0,0 +1,302 @@ +"""TypeSpec, SymbolMeta, SymbolKind — CTypeInfo 的拆分类型 + +Phase 1 重构:将 CTypeInfo 的 40+ 平铺字段拆分为三个聚焦的类型: +- TypeSpec: 纯类型描述(BaseType + 指针 + 限定符 + 数组维度等) +- SymbolMeta: 符号表元数据(名称、行号、文件、类型种类、成员等) +- SymbolKind: 枚举类型种类(从 _kind_flags 派生,供新代码使用) + +设计原则: +- CTypeInfo 内部组合 TypeSpec + SymbolMeta +- 旧 property 委托到新字段,外部代码零修改 +- 渐进式迁移:先加新字段,后删旧字段 +- _kind_flags 保持独立 bool(因为 IsTypedef 和 IsStruct 可以同时为 True) +- SymbolKind 从 _kind_flags 派生,供新代码使用 +""" +from __future__ import annotations + +import enum +from typing import TYPE_CHECKING, List, Dict, Tuple, Any, Optional + +if TYPE_CHECKING: + from lib.core.Handles.HandlesBase import CTypeInfo + from lib.includes import t + + +class SymbolKind(enum.Enum): + """符号类型种类 — 从 _kind_flags 派生的主类型 + + 注意:IsTypedef 与 IsStruct/IsEnum/IsUnion 正交(可以同时为 True), + 因此 SymbolKind 只反映"主类型",IsTypedef 需要单独查询。 + """ + UNKNOWN = 0 + VARIABLE = 1 + FUNCTION = 2 + STRUCT = 3 + UNION = 4 + ENUM = 5 + DEFINE = 6 + ENUM_MEMBER = 7 + MODULE = 8 + EXCEPTION = 9 + RENUM = 10 + FUNC_PTR = 11 + STATE = 12 + CPYTHON_OBJECT = 13 + + +# CTypeInfo 旧字段 → (目标, 新字段名) 的路由表 +# 目标: 'ts' = TypeSpec, 'sm' = SymbolMeta, 'kf' = _kind_flags +FIELD_ROUTES = { + # --- TypeSpec 字段 --- + 'PtrCount': ('ts', 'ptr_count'), + 'VarConst': ('ts', 'var_const'), + 'VarVolatile': ('ts', 'var_volatile'), + 'DataConst': ('ts', 'data_const'), + 'DataVolatile': ('ts', 'data_volatile'), + 'ArrayDims': ('ts', 'array_dims'), + 'Storage': ('ts', 'storage'), + 'IsFuncPtr': ('ts', 'is_func_ptr'), + 'FuncPtrParams': ('ts', 'func_ptr_params'), + 'FuncParamNames': ('ts', 'func_param_names'), + 'FuncPtrReturn': ('ts', 'func_ptr_return'), + 'IsVariadic': ('ts', 'is_variadic'), + 'IsBitField': ('ts', 'is_bitfield'), + 'BitWidth': ('ts', 'bit_width'), + 'ByteOrder': ('ts', 'byte_order'), + 'IsArrayPtr': ('ts', 'is_array_ptr'), + 'ArrayPtr': ('ts', 'array_ptr'), + 'IsState': ('ts', 'is_state'), + 'OriginalType': ('ts', 'original_type'), + + # --- SymbolMeta 字段 --- + 'Name': ('sm', 'name'), + 'Lineno': ('sm', 'lineno'), + 'file': ('sm', 'file'), + 'ModuleName': ('sm', 'module_name'), + 'Members': ('sm', 'members'), + 'IsCpythonObject':('sm', 'is_cpython_object'), + 'IsPacked': ('sm', 'is_packed'), + 'IsAnonymous': ('sm', 'is_anonymous'), + 'IsInline': ('sm', 'is_inline'), + 'InlineBody': ('sm', 'inline_body'), + 'InlineParams': ('sm', 'inline_params'), + 'RenumVariants': ('sm', 'renum_variants'), + 'DeclaredType': ('sm', 'declared_type'), + 'CreturnTypes': ('sm', 'creturn_types'), + 'MetaList': ('sm', 'meta_list'), + 'IsModuleAlias': ('sm', 'is_module_alias'), + 'ResolvedModule': ('sm', 'resolved_module'), + 'DefineValue': ('sm', 'define_value'), + + # --- _kind_flags(独立 bool,存储在 SymbolMeta._kind_flags)--- + 'IsStruct': ('kf', 'IsStruct'), + 'IsEnum': ('kf', 'IsEnum'), + 'IsUnion': ('kf', 'IsUnion'), + 'IsTypedef': ('kf', 'IsTypedef'), + 'IsVariable': ('kf', 'IsVariable'), + 'IsFunction': ('kf', 'IsFunction'), + 'IsDefine': ('kf', 'IsDefine'), + 'IsEnumMember': ('kf', 'IsEnumMember'), + 'IsRenum': ('kf', 'IsRenum'), + 'IsExceptionClass': ('kf', 'IsExceptionClass'), + + # --- _extra(CTypeInfo 旧 _extra 字典,迁移到 SymbolMeta)--- + '_extra': ('sm', '_extra'), +} + + +class TypeSpec: + """纯类型描述 — 不包含符号表元数据 + + 职责:描述一个 C 类型的结构(基础类型、指针层数、限定符、数组维度等) + 不包含:名称、行号、文件路径、符号种类等元数据(这些归 SymbolMeta) + + 注意:当前阶段保持与 CTypeInfo 旧字段的兼容性, + PtrCount/VarConst/DataConst 等仍然使用扁平字段。 + 未来 Phase 2 会将指针改为嵌套 PointerLayer 表示。 + """ + + __slots__ = ( + '_base_type', 'ptr_count', + 'var_const', 'var_volatile', 'data_const', 'data_volatile', + 'array_dims', 'storage', + 'is_func_ptr', 'func_ptr_params', 'func_param_names', 'func_ptr_return', + 'is_variadic', + 'is_bitfield', 'bit_width', + 'byte_order', + 'is_array_ptr', 'array_ptr', + 'is_state', + 'original_type', + ) + + def __init__(self): + self._base_type: Any = None # t.CType 实例或 tuple + self.ptr_count: int = 0 + self.var_const: bool = False + self.var_volatile: bool = False + self.data_const: bool = False + self.data_volatile: bool = False + self.array_dims: List[str] = [] + self.storage: Any = None # t.CType (CStatic/CExtern/CExport 等) + self.is_func_ptr: bool = False + self.func_ptr_params: List[Tuple[str, Any]] = [] # (参数名, CTypeInfo) + self.func_param_names: List[str] = [] + self.func_ptr_return: Any = None # CTypeInfo + self.is_variadic: bool = False + self.is_bitfield: bool = False + self.bit_width: int = 0 + self.byte_order: str = "" # "big", "little", or "" + self.is_array_ptr: bool = False + self.array_ptr: Any = None # CTypeInfo + self.is_state: bool = False + self.original_type: Any = None # CTypeInfo | str | None (typedef 原始类型) + + @property + def base_type(self) -> Any: + return self._base_type + + @base_type.setter + def base_type(self, value: Any): + """设置 BaseType,与 CTypeInfo.BaseType setter 逻辑一致(不含 kind 副作用)""" + from lib.includes import t + + if value is None: + self._base_type = None + return + + if isinstance(value, (tuple, list)): + self._base_type = tuple(value) + return + + if isinstance(value, type) and issubclass(value, t.CType): + self._base_type = value() + return + + if isinstance(value, t.CType): + self._base_type = value + return + + raise TypeError( + f"base_type must be t.CType instance, type subclass, or tuple of t.CType, got {type(value)}" + ) + + def copy(self) -> TypeSpec: + """深拷贝""" + new = TypeSpec() + new._base_type = self._base_type + new.ptr_count = self.ptr_count + new.var_const = self.var_const + new.var_volatile = self.var_volatile + new.data_const = self.data_const + new.data_volatile = self.data_volatile + new.array_dims = list(self.array_dims) + new.storage = self.storage + new.is_func_ptr = self.is_func_ptr + new.func_ptr_params = list(self.func_ptr_params) + new.func_param_names = list(self.func_param_names) + new.func_ptr_return = self.func_ptr_return + new.is_variadic = self.is_variadic + new.is_bitfield = self.is_bitfield + new.bit_width = self.bit_width + new.byte_order = self.byte_order + new.is_array_ptr = self.is_array_ptr + new.array_ptr = self.array_ptr + new.is_state = self.is_state + new.original_type = self.original_type + return new + + +class SymbolMeta: + """符号表条目的元数据 — 与类型描述无关 + + 职责:记录符号的名称、位置、种类、成员等元数据 + 不包含:类型结构(BaseType、指针、限定符等,这些归 TypeSpec) + + _kind_flags: 独立 bool 字典,存储 IsStruct/IsEnum/IsTypedef 等。 + 这些 flag 不是互斥的(IsTypedef 和 IsStruct 可以同时为 True)。 + SymbolKind 从 _kind_flags 派生,供新代码使用。 + """ + + __slots__ = ( + 'name', 'lineno', 'file', 'module_name', + 'members', + 'is_cpython_object', 'is_packed', + 'define_value', + 'is_inline', 'inline_body', 'inline_params', + 'is_anonymous', + 'renum_variants', + 'declared_type', 'creturn_types', + 'meta_list', + 'is_module_alias', 'resolved_module', + '_kind_flags', + '_extra', + ) + + def __init__(self): + self.name: str = "" + self.lineno: int = 0 + self.file: str = "" + self.module_name: str = "" + self.members: Dict[str, Any] = {} # 成员名 -> CTypeInfo + self.is_cpython_object: bool = False + self.is_packed: bool = False + self.define_value: Any = None + self.is_inline: bool = False + self.inline_body: list | None = None + self.inline_params: list | None = None + self.is_anonymous: bool = False + self.renum_variants: list = [] + self.declared_type: str = "" + self.creturn_types: list = [] + self.meta_list: Any = None # FuncMeta + self.is_module_alias: bool = False + self.resolved_module: str | None = None + self._kind_flags: Dict[str, bool] = {} # IsStruct/IsEnum/IsTypedef 等 + self._extra: dict = {} + + @property + def kind(self) -> SymbolKind: + """从 _kind_flags 派生主类型种类""" + kf = self._kind_flags + if kf.get('IsStruct') or self.is_cpython_object: + return SymbolKind.STRUCT if not self.is_cpython_object else SymbolKind.CPYTHON_OBJECT + if kf.get('IsEnum'): + return SymbolKind.RENUM if kf.get('IsRenum') else SymbolKind.ENUM + if kf.get('IsUnion'): + return SymbolKind.UNION + if kf.get('IsFunction'): + return SymbolKind.FUNCTION + if kf.get('IsVariable'): + return SymbolKind.VARIABLE + if kf.get('IsDefine'): + return SymbolKind.DEFINE + if kf.get('IsEnumMember'): + return SymbolKind.ENUM_MEMBER + if kf.get('IsExceptionClass'): + return SymbolKind.EXCEPTION + return SymbolKind.UNKNOWN + + def copy(self) -> SymbolMeta: + """深拷贝""" + new = SymbolMeta() + new.name = self.name + new.lineno = self.lineno + new.file = self.file + new.module_name = self.module_name + new.members = dict(self.members) + new.is_cpython_object = self.is_cpython_object + new.is_packed = self.is_packed + new.define_value = self.define_value + new.is_inline = self.is_inline + new.inline_body = self.inline_body + new.inline_params = list(self.inline_params) if self.inline_params else None + new.is_anonymous = self.is_anonymous + new.renum_variants = list(self.renum_variants) + new.declared_type = self.declared_type + new.creturn_types = list(self.creturn_types) + new.meta_list = self.meta_list + new.is_module_alias = self.is_module_alias + new.resolved_module = self.resolved_module + new._kind_flags = dict(self._kind_flags) + new._extra = dict(self._extra) + return new