From 109e71a4778ebc21497b3466cefd72f4663acf07 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 18 Oct 2026 19:22:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E6=80=A7=E5=85=BC=E5=AE=B9=E5=85=9C=E5=BA=95=EF=BC=8C?= =?UTF-8?q?=E4=BB=85=E4=BF=9D=E7=95=99=E6=96=B0=E8=AF=AD=E6=B3=95=E4=B8=BB?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除 len(list) 直读 __count__、list 方法裸模板回退、旧 C* 文本标记兼容、旧联合兼容;vast 扩展过期直接报错,已重建 _parser.pyd。 --- lib/Projectrans/DeclarationGenerator.py | 26 +++------- lib/Projectrans/Phase1Generator.py | 11 ++-- lib/Projectrans/Phase2Translator.py | 36 +++++-------- lib/Projectrans/Utils.py | 11 ++-- lib/StubGen/Converter.py | 66 +++++------------------- lib/core/Handles/HandlesAssign.py | 6 --- lib/core/Handles/HandlesExprBuiltin.py | 14 ----- lib/core/Handles/HandlesExprCall.py | 41 --------------- lib/core/Handles/HandlesExprUtils.py | 14 +---- lib/core/Handles/HandlesFunctions.py | 6 --- lib/core/Handles/HandlesImports.py | 26 +--------- lib/vast/__init__.py | 47 ++++++++++------- lib/vast_c/_parser.pyd | Bin 227866 -> 230338 bytes 13 files changed, 72 insertions(+), 232 deletions(-) diff --git a/lib/Projectrans/DeclarationGenerator.py b/lib/Projectrans/DeclarationGenerator.py index f7a2267..95407d0 100644 --- a/lib/Projectrans/DeclarationGenerator.py +++ b/lib/Projectrans/DeclarationGenerator.py @@ -10,7 +10,7 @@ import llvmlite.ir as ir from lib.core import TypeSystem from lib.core.TypeSystem import CTypeRegistry from lib.core.SymbolUtils import ( - IsListAnnotation, AnnotationContainsName, IsCPtrSubscriptNode, + IsListAnnotation, IsCPtrSubscriptNode, IsRawPtrSubscriptNode, IsPtrSubscriptNode, ResolveGenericTypeArgStr, EnumClassIntWidth, ClassHasFuncLevelCVTable) @@ -97,9 +97,6 @@ class DeclarationGenerator: Markers: tuple[str, ...] = tuple(getattr(node, 'Markers', None) or ()) + tuple( getattr(node.annotation, 'Markers', None) or ()) is_typedef: bool = 'typedef' in Markers - if not is_typedef and AnnotationContainsName(node.annotation, 'CTypedef'): - # 兼容旧写法 `名字: CTypedef = 类型`(仅文本判据回落)。 - is_typedef = True if is_typedef and node.value: self.typedef_map[var_name] = node.value @@ -231,7 +228,7 @@ class DeclarationGenerator: """检查函数是否导出/外部可见(export / extern / state)。 新语法的 `export def` / `extern def` 由解析器写入 FunctionDef.Export / - Extern;旧语法的 `-> CExport | T` / `-> State | T` 仍走注解兼容判据。 + Extern。 """ if bool(getattr(node, 'Export', False)) or bool(getattr(node, 'Extern', False)): return True @@ -243,35 +240,28 @@ class DeclarationGenerator: return self._check_annotation_for_export(node.returns) def _check_annotation_for_export(self, annotation: ast.AST | None) -> bool: - """检查类型注解是否带 export / extern / state 标记。 - - 优先读 AST 的 Markers 字段;旧的 CExport/State 文本判断仅作兼容。 - """ + """检查类型注解是否带 export / extern / state 标记(只读 Markers)。""" if annotation is None: return False Markers: tuple[str, ...] = getattr(annotation, 'Markers', None) or () - if 'export' in Markers or 'extern' in Markers or 'state' in Markers: - return True - return (AnnotationContainsName(annotation, 'CExport') - or AnnotationContainsName(annotation, 'CExtern') - or AnnotationContainsName(annotation, 'State')) + return 'export' in Markers or 'extern' in Markers or 'state' in Markers def _generate_global_decl(self, node: ast.AnnAssign) -> str | None: """生成全局变量声明""" if not isinstance(node.target, ast.Name): return None var_name: str = node.target.id - # CDefine 是编译期常量,不是变量:stub 里**不得**生成 external global, + # define 是编译期常量,不是变量:stub 里**不得**生成 external global, # 否则其他模块引用它时变成未定义符号(链接失败)。标记由 Markers 字段承载。 Markers: tuple[str, ...] = tuple(getattr(node, 'Markers', None) or ()) + tuple( getattr(node.annotation, 'Markers', None) or ()) - if 'define' in Markers or AnnotationContainsName(node.annotation, 'CDefine'): + if 'define' in Markers: return None - if 'typedef' in Markers or AnnotationContainsName(node.annotation, 'CTypedef'): + if 'typedef' in Markers: return None if isinstance(node.annotation, ast.List): for elt in node.annotation.elts: - if isinstance(elt, ast.Attribute) and hasattr(elt, 'attr') and elt.attr in ('CTypedef', 'Callable'): + if isinstance(elt, ast.Attribute) and hasattr(elt, 'attr') and elt.attr == 'Callable': return None if isinstance(elt, ast.Subscript) and isinstance(elt.value, ast.Name) and elt.value.id == 'Callable': return None diff --git a/lib/Projectrans/Phase1Generator.py b/lib/Projectrans/Phase1Generator.py index e0e69c1..cd52c57 100644 --- a/lib/Projectrans/Phase1Generator.py +++ b/lib/Projectrans/Phase1Generator.py @@ -9,7 +9,7 @@ import traceback from lib.Projectrans.Utils import compute_sha1, get_file_dependencies, find_reachable_files_from_entries, parse_python_file from lib.Projectrans.DeclarationGenerator import DeclarationGenerator from lib.core.VLogger import get_logger as _vlog -from lib.core.SymbolUtils import ExpandSoftKeywords, AnnotationContainsName +from lib.core.SymbolUtils import ExpandSoftKeywords from lib.constants.config import mode as _ConfigMode from lib.core import TypeSystem from StubGen import PythonToStubConverter @@ -381,13 +381,10 @@ class Phase1Generator: if isinstance(node, ast.AnnAssign) and isinstance(node.target, ast.Name): var_name: str = node.target.id # 新语法 `typedef 名字 = 类型` 由解析器写入 - # node/annotation 的 Markers;旧 `名字: CTypedef = 类型` - # 只作为兼容回落。 + # node/annotation 的 Markers。 _Markers: tuple[str, ...] = (tuple(getattr(node, 'Markers', None) or ()) + tuple(getattr(node.annotation, 'Markers', None) or ())) - is_typedef: bool = ( - 'typedef' in _Markers - or AnnotationContainsName(node.annotation, 'CTypedef')) + is_typedef: bool = 'typedef' in _Markers if is_typedef and node.value and var_name not in typedef_map: typedef_map[var_name] = node.value except Exception as _e: @@ -403,7 +400,7 @@ class Phase1Generator: 当前 include 的 .stub.ll 缓存应失效(因为类型引用的 SHA1 前缀会变化)。 签名同时纳入 includes/builtins.vp:它是注解类型解析的隐式输入 - (不在任何模块的 import 闭包,但其 CTypedef 参与签名/字段类型解析), + (不在任何模块的 import 闭包,但其 typedef 参与签名/字段类型解析), 其内容变化必须让所有 .stub.ll 失效——否则旧声明(如 sizet 曾被解析成 %"{mod}.sizet"* 假结构体)会被缓存继续引用,源码修复不生效。 """ diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index 4244ae4..d464d24 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -18,9 +18,9 @@ from lib.constants.config import mode as _config_mode from lib.core.Handles.HandlesBase import CTypeInfo from lib.core.SymbolData import ModuleSymbols from lib.core import TypeSystem -from lib.core.SymbolUtils import AnnotationContainsName, ExpandSoftKeywords, DefineDeclIntTypeFromAnnotation +from lib.core.SymbolUtils import ExpandSoftKeywords, DefineDeclIntTypeFromAnnotation from lib.core.SymbolUtils import ClassHasFuncLevelCVTable, IsVtableSlotMethod -from lib.Projectrans.Utils import compute_sha1, _check_annotation_for_export, find_reachable_files_from_entries, topological_sort_files, parse_python_file +from lib.Projectrans.Utils import compute_sha1, find_reachable_files_from_entries, topological_sort_files, parse_python_file from lib.Projectrans.Phase1Generator import _TryGlobalCache, _SaveToGlobalCache, _GLOBAL_CACHE_DIR import TransPyC from StubGen import PythonToStubConverter @@ -606,7 +606,7 @@ def _PickWorkerCount(n_files: int, per_worker_mb: int = 350) -> int: def _ExtractCDefineConstantsFromPyi(pyi_path: str, all_dc: dict[str, object], symtab: object | None = None, all_dt: dict[str, tuple[int, bool]] | None = None) -> None: - """从 .pyi 文件中提取 CDefine 常量到 all_dc。文件不存在时静默跳过。 + """从 .pyi 文件中提取 define 常量到 all_dc。文件不存在时静默跳过。 治本修复:原实现只支持 ast.Constant 和 float() 调用, 无法处理 CUnsignedLong(-11)(ast.Call)和 @@ -616,7 +616,7 @@ def _ExtractCDefineConstantsFromPyi(pyi_path: str, all_dc: dict[str, object], - ast.Call: 类型构造 (CUnsignedLong(-11)) - ast.BinOp: 位运算 (FOREGROUND_RED | FOREGROUND_GREEN) - ast.UnaryOp: 一元运算 (-11) - - ast.Name: 引用其他 CDefine 常量 + - ast.Name: 引用其他 define 常量 """ if not os.path.exists(pyi_path): return @@ -642,10 +642,8 @@ def _ExtractCDefineConstantsFromPyi(pyi_path: str, all_dc: dict[str, object], if isinstance(node, ast.AnnAssign) and isinstance(node.target, ast.Name): Markers: tuple[str, ...] = (tuple(getattr(node, 'Markers', None) or ()) + tuple(getattr(node.annotation, 'Markers', None) or ())) - # 新语法 `define NAME = v` 由解析器写入 Markers;旧 - # `NAME: CDefine = v` 仅作兼容回落。 - if ('define' in Markers - or AnnotationContainsName(node.annotation, 'CDefine')) and node.value: + # 新语法 `define NAME = v` 由解析器写入 Markers。 + if 'define' in Markers and node.value: val: object = ConstEvaluator.eval_full(node.value, ctx) if val is None and isinstance(node.value, ast.Call) and len(node.value.args) == 1: # 类型构造的**裸别名**形态(如 `DWORD(-11)`,非 `CUnsignedLong(-11)`): @@ -655,7 +653,7 @@ def _ExtractCDefineConstantsFromPyi(pyi_path: str, all_dc: dict[str, object], # 现场:win32file.vp 的 STD_INPUT/OUTPUT/ERROR_HANDLE 是全仓**唯一**用 # 别名构造写的 define → 唯独这三个进不了 _all_define_constants,导致 # 模块属性访问 `wf.STD_ERROR_HANDLE` 解析落空、退化成未定义的全局符号 - # (链接失败)。CDefine 关心的是常量值,故回退求值其唯一实参(位型一致)。 + # (链接失败)。define 关心的是常量值,故回退求值其唯一实参(位型一致)。 val = ConstEvaluator.eval_full(node.value.args[0], ctx) if val is not None and isinstance(val, (int, float, str)): all_dc[node.target.id] = val @@ -670,21 +668,18 @@ def _ExtractCDefineConstantsFromPyi(pyi_path: str, all_dc: dict[str, object], def _IsExportExternFuncNode(node: ast.FunctionDef) -> bool: - """函数是否导出/外部可见:优先读 `export def` / `extern def` 的 AST 标记, - 再回落到 Markers,最后兼容旧的 `-> CExport/CExtern/State` 注解写法。""" + """函数是否导出/外部可见:读 `export def` / `extern def` 的 AST 标记与 Markers。""" if bool(getattr(node, 'Export', False)) or bool(getattr(node, 'Extern', False)): return True Markers: tuple[str, ...] = getattr(node, 'Markers', None) or () - if 'export' in Markers or 'extern' in Markers or 'state' in Markers: - return True - return _check_annotation_for_export(node.returns) + return 'export' in Markers or 'extern' in Markers or 'state' in Markers def _CountUnresolvedTypedefs(module_symbols: object) -> int: """该模块"有值注解却解析不出类型"的 typedef 个数(供声明阶段判断是否要下一轮)。 typedef 右侧可以引用**其它模块**的 typedef:例 win32base 的 - `HANDLE: CTypedef = VOIDPTR`(VOIDPTR 在 stdint)——本模块先 stage 时右侧 + `typedef HANDLE = VOIDPTR`(VOIDPTR 在 stdint)——本模块先 stage 时右侧 解析为空(original_type_kind/original_class 均为 None),要等依赖模块入表后 重 stage 才能补全。返回 0 表示本模块声明已完整(不再需要重跑)。 """ @@ -4359,15 +4354,10 @@ class Phase2Translator: module_name = os.path.splitext(os.path.basename(src_path))[0] for node in ast.iter_child_nodes(tree): if isinstance(node, ast.FunctionDef) and node.returns: - # 新语法 `inline` 由解析器写入返回注解的 Markers; - # 旧 `-> CInline | T` 的联合形态已废止(下方 fail-fast)。 + # 新语法 `inline` 由解析器写入返回注解的 Markers。 ReturnMarkers: tuple[str, ...] = getattr(node.returns, 'Markers', None) or () is_inline: bool = 'inline' in ReturnMarkers - if isinstance(node.returns, ast.Attribute) and node.returns.attr == 'CInline': - is_inline = True - elif isinstance(node.returns, ast.Name) and node.returns.id == 'CInline': - is_inline = True - elif isinstance(node.returns, ast.BinOp) and isinstance(node.returns.op, ast.BitOr): + if isinstance(node.returns, ast.BinOp) and isinstance(node.returns.op, ast.BitOr): _Line: int = getattr(node.returns, 'lineno', 0) or 0 raise TypeError( f"[TPC] 不支持类型联合 'T1 | T2'(第 {_Line} 行);" @@ -4454,7 +4444,7 @@ class Phase2Translator: # ① 声明阶段(全部模块;多轮直到"本轮没有新增可解析的声明") # 单轮仍会与模块顺序有关:typedef 右侧可以引用**其它模块**的 typedef, - # 例 win32base 的 `HANDLE: CTypedef = VOIDPTR`,VOIDPTR 在 stdint + # 例 win32base 的 `typedef HANDLE = VOIDPTR`,VOIDPTR 在 stdint # ⇒ 本模块先 stage 时右侧解析为空;下一轮把它重 stage 一遍(重 stage 覆盖 # 登记,条目随依赖入表而变完整)。无进展即停,最多再跑一轮。 _stage_map: dict[tuple[str, str], ModuleSymbols] = {} diff --git a/lib/Projectrans/Utils.py b/lib/Projectrans/Utils.py index 701ddbf..3821b8b 100644 --- a/lib/Projectrans/Utils.py +++ b/lib/Projectrans/Utils.py @@ -8,7 +8,7 @@ import vast as ast from lib.core.VLogger import get_logger as _vlog from lib.constants.config import mode as _ConfigMode -from lib.core.SymbolUtils import AnnotationContainsName, ExpandSoftKeywords +from lib.core.SymbolUtils import ExpandSoftKeywords # compute_sha1 结果缓存:同一内容字符串(如 parse_python_file 缓存中的 content)会被 @@ -43,17 +43,12 @@ _FILE_AST_CACHE: dict[str, tuple[float, str, ast.Module]] = {} def _check_annotation_for_export(annotation: ast.AST | None) -> bool: """检查类型注解是否带 export / extern / state。 - 优先读解析器写入的 Markers 字段(export/extern/state);旧的 - CExport/CExtern/State 文本判断仅作兼容回落。 + 只读解析器写入的 Markers 字段(export/extern/state)。 """ if not annotation: return False Markers: tuple[str, ...] = getattr(annotation, 'Markers', None) or () - if 'export' in Markers or 'extern' in Markers or 'state' in Markers: - return True - return (AnnotationContainsName(annotation, 'CExport') or - AnnotationContainsName(annotation, 'CExtern') or - AnnotationContainsName(annotation, 'State')) + return 'export' in Markers or 'extern' in Markers or 'state' in Markers def sha1_file(filepath: str) -> str: diff --git a/lib/StubGen/Converter.py b/lib/StubGen/Converter.py index 03b4568..f821d86 100644 --- a/lib/StubGen/Converter.py +++ b/lib/StubGen/Converter.py @@ -19,22 +19,10 @@ _ConvertCacheMaxSize: int = 4096 _RE_LINE_COMMENT: re.Pattern[str] = re.compile(r'#.*$') +# 内部指针标记 -> 源码语法名(仅保留内部标记还原,不做旧类型名兼容) _STUB_TYPE_ALIASES: dict[str, str] = { 'CPtr': 'rawptr', 'CArrayPtr': 'rawptr', 'CAutoPtr': 'rawptr', 'CRef': 'rawptr', 'CTempRef': 'rawptr', - # 旧内建类型名 → 新语法内建名(输入兼容;输出不得再出现 C* 标记) - 'CChar': 'char', 'CInt': 'int', 'CShort': 'short', 'CLong': 'long', - 'CLongLong': 'longlong', 'CFloat': 'float', 'CDouble': 'double', - 'CVoid': 'void', 'CUnsigned': 'uint', 'CUnsignedChar': 'uchar', - 'CUnsignedInt': 'uint', 'CUnsignedShort': 'ushort', - 'CUnsignedLong': 'ulong', 'CUnsignedLongLong': 'ulonglong', - 'CSignedChar': 'char', 'CBool': 'bool', 'CSizeT': 'sizet', - 'CInt8T': 'int8', 'CInt16T': 'int16', 'CInt32T': 'int32', 'CInt64T': 'int64', - 'CUInt8T': 'uint8', 'CUInt16T': 'uint16', 'CUInt32T': 'uint32', 'CUInt64T': 'uint64', - 'CIntPtrT': 'intptr', 'CUIntPtrT': 'uintptr', 'CPtrDiffT': 'ptrdifft', - 'CWCharT': 'wchar', 'CChar8T': 'char8', 'CChar16T': 'char16', 'CChar32T': 'char32', - 'CFloat8T': 'float8', 'CFloat16T': 'float16', 'CFloat32T': 'float32', - 'CFloat64T': 'float64', 'CFloat128T': 'float128', } @@ -175,7 +163,7 @@ class PythonToStubConverter: _AnnMarkers: tuple[str, ...] = ( tuple(getattr(node, 'Markers', None) or ()) + tuple(getattr(node.annotation, 'Markers', None) or ())) - HasStatic: bool = 'static' in _AnnMarkers or 'CStatic' in TypeStr + HasStatic: bool = 'static' in _AnnMarkers # 检查变量是否应该被排除 ShouldExclude: bool = False if isinstance(node.target, ast.Name) and not HasStatic: @@ -375,17 +363,18 @@ class PythonToStubConverter: else: lines.append(f'{MemberIndent}{item.target.id}: {TypeStr}') continue - # 检查是否是宏变量(Markers 标记 define;CDefine 仅兼容旧文本) + # 检查是否是宏变量(Markers 标记 define) _MemberMarkers: tuple[str, ...] = ( tuple(getattr(item, 'Markers', None) or ()) + tuple(getattr(item.annotation, 'Markers', None) or ())) - if 'define' in _MemberMarkers or 'CDefine' in TypeStr: + if 'define' in _MemberMarkers: # 检查宏变量是否应该被排除 if isinstance(item.target, ast.Name): MacroName: str = item.target.id if PythonToStubConverter._ShouldExcludeMacro(MacroName): continue # 跳过该宏 # 统一输出新语法 `define NAME[: 类型] = 值` + # 解析器对未标注类型的 define 以 CDefine 作注解占位(同 Unparser)。 ImplicitType: bool = ( isinstance(item.annotation, ast.Name) and item.annotation.id == 'CDefine') @@ -464,8 +453,6 @@ class PythonToStubConverter: # 跳过宏守卫相关行 if line.strip().startswith('CIfndef(') or line.strip().startswith('CEndif()'): continue - if ': CDefine' in line and '__' in line: - continue FilteredLines.append(line) lines.extend(FilteredLines) @@ -486,14 +473,9 @@ class PythonToStubConverter: lines: list[str] = [] IndentStr: str = ' ' * indent - # 检查是否是宏函数:新语法由解析器写 node.Define;旧 `-> CDefine` - # 返回注解仅作兼容回落。 + # 检查是否是宏函数:新语法由解析器写 node.Define / 返回注解 Markers ReturnMarkers: tuple[str, ...] = getattr(node.returns, 'Markers', None) or () if node.returns else () is_macro_func: bool = bool(getattr(node, 'Define', False)) or 'define' in ReturnMarkers - if node.returns: - ReturnType: str = PythonToStubConverter._GetTypeString(node.returns) - if 'CDefine' in ReturnType: - is_macro_func = True # 如果是宏函数,检查是否应该被排除 if is_macro_func: @@ -525,7 +507,7 @@ class PythonToStubConverter: # 处理函数装饰器:存储类/一次性初始化还原为关键字前缀。 # 新语法的 `extern def` / `export def` / `static def` 由解析器写入 - # FunctionDef.Extern/Export/Static;旧装饰器形态仅作兼容。 + # FunctionDef.Extern/Export/Static。 IsExternFunc: bool = bool(getattr(node, 'Extern', False)) IsExportFunc: bool = bool(getattr(node, 'Export', False)) IsStaticFunc: bool = bool(getattr(node, 'Static', False)) @@ -538,12 +520,6 @@ class PythonToStubConverter: DecoratorShort: str = DecoratorStr.rsplit('.', 1)[-1] if DecoratorShort == 'TLS': IsTlsFunc = True - elif DecoratorShort == 'CStatic': - IsStaticFunc = True - elif DecoratorShort == 'CExport': - IsExportFunc = True - elif DecoratorShort == 'CExtern': - IsExternFunc = True elif DecoratorShort == 'CVTable': IsVirtualFunc = True elif DecoratorShort == 'NoVTable': @@ -639,12 +615,13 @@ class PythonToStubConverter: TypeStr: str = PythonToStubConverter._GetTypeString(node.annotation) Markers: tuple[str, ...] = (tuple(getattr(node, 'Markers', None) or ()) + tuple(getattr(node.annotation, 'Markers', None) or ())) - # 检查是否是宏变量(优先读 Markers 的 define;CDefine 仅兼容旧文本) - if 'CDefine' in TypeStr or 'define' in Markers: + # 检查是否是宏变量(读 Markers 的 define) + if 'define' in Markers: # 检查宏变量是否应该被排除 if PythonToStubConverter._ShouldExcludeMacro(VarName): return lines # 返回空列表,排除该宏 - # 统一输出新语法 `define NAME[: 类型] = 值`(旧写法在此归一化) + # 统一输出新语法 `define NAME[: 类型] = 值` + # 解析器对未标注类型的 define 以 CDefine 作注解占位(同 Unparser)。 ImplicitType: bool = ( isinstance(node.annotation, ast.Name) and node.annotation.id == 'CDefine') @@ -661,7 +638,7 @@ class PythonToStubConverter: return lines # 非宏变量:不加 State # 含有 typedef 的变量不加 extern,普通变量需要加 extern - has_typedef: bool = 'CTypedef' in TypeStr or 'typedef' in Markers + has_typedef: bool = 'typedef' in Markers if has_typedef: ValueNode: ast.AST | None = node.value if node.value is not None else node.annotation ValueTypeStr: str = PythonToStubConverter._GetTypeString(ValueNode) @@ -803,8 +780,7 @@ class PythonToStubConverter: return PythonToStubConverter._GetTypeString(annotation.slice) + '*' return f'{base}[{SliceStr}]' elif isinstance(annotation, ast.BinOp): - # 类型注解不再接受 `T1 | T2` 联合(包括旧的 CExtern | T / - # CDefine | T / T | CRef):一律 fail-fast,不做任何合并。 + # 类型注解不接受 `T1 | T2` 联合:一律 fail-fast。 if isinstance(annotation.op, ast.BitOr): Line: int = getattr(annotation, 'lineno', 0) or 0 raise TypeError( @@ -880,11 +856,7 @@ class PythonToStubConverter: elements: list[str] = [PythonToStubConverter._GetTypeString(elem) for elem in annotation.elts] return f'[{", ".join(elements)}]' elif isinstance(annotation, ast.Call): - # 处理函数调用形式的类型注解,如 Postdefinition(xxa) 或 callable(CVoid, app_id = CInt) - # 如果是 __set_default__ 调用,只返回函数名部分 - if isinstance(annotation.func, ast.Attribute) and annotation.func.attr in ('__set_default__', '__set_default'): - return PythonToStubConverter._GetTypeString(annotation.func.value) - + # 处理函数调用形式的类型注解,如 Postdefinition(xxa) 或 callable(void, app_id = int) FuncStr: str = PythonToStubConverter._GetTypeString(annotation.func) ArgsStr: str = ', '.join([PythonToStubConverter._GetTypeString(arg) for arg in annotation.args]) # 处理关键字参数 @@ -913,17 +885,7 @@ class PythonToStubConverter: """从 Postdefinition 类型注解中提取类名 例如:Postdefinition(__buddy_system) -> '__buddy_system' - Postdefinition(xxx) | CTypedef -> 'xxx' """ - # 类型注解中的 BinOp(BitOr) 联合已废止:fail-fast,不做合并。 - if isinstance(annotation, ast.BinOp): - if isinstance(annotation.op, ast.BitOr): - Line: int = getattr(annotation, 'lineno', 0) or 0 - raise TypeError( - f"[TPC] 不支持类型联合 'T1 | T2'(第 {Line} 行);" - f"类型注解只能是单一类型") - return None - # 处理函数调用 (如: Postdefinition(__buddy_system)) if isinstance(annotation, ast.Call): FuncStr: str = PythonToStubConverter._GetTypeString(annotation.func) diff --git a/lib/core/Handles/HandlesAssign.py b/lib/core/Handles/HandlesAssign.py index 99b24b3..eba063d 100644 --- a/lib/core/Handles/HandlesAssign.py +++ b/lib/core/Handles/HandlesAssign.py @@ -2407,12 +2407,6 @@ class AssignHandle(BaseHandle): raise TypeError( f"[TPC] 不支持类型联合 'T1 | T2'(第 {Line} 行);" f"类型注解只能是单一类型:指针请写 CPtr[T],修饰符请用关键字") - if isinstance(annotation, ast.Attribute): - if annotation.attr in ('CTypedef', 'CDefine'): - return True - # 兼容旧 AST:裸标记名(新表示为 Markers,已在函数入口命中)。 - if isinstance(annotation, ast.Name): - return annotation.id in ('CTypedef', 'CDefine') if isinstance(annotation, ast.Subscript): return self._IsTypedefAnnotation(annotation.value) return False diff --git a/lib/core/Handles/HandlesExprBuiltin.py b/lib/core/Handles/HandlesExprBuiltin.py index 2f1d8f9..bab40b9 100644 --- a/lib/core/Handles/HandlesExprBuiltin.py +++ b/lib/core/Handles/HandlesExprBuiltin.py @@ -737,20 +737,6 @@ class ExprBuiltinHandle(BaseHandle): result = self.Trans.ExprUtils._try_operator_overLoad(_matched_cn, '__len__', val, Gen) if result is not None: return result - if _matched_cn.startswith('list['): - try: - _count_off: int | None = Gen._get_member_offset('__count__', _matched_cn, pointee) - except Exception: - # 特化结构体尚未展开布局(opaque):_list.vp 的 list 依次为 - # __data__(ptr) / __count__ / __capacity__ / __pool__ / ... - _count_off = 8 - if _count_off is not None: - _i8p = Gen.builder.bitcast(val, ir.PointerType(ir.IntType(8)), name='list_i8p') - _count_addr = Gen.builder.gep( - _i8p, [ir.Constant(ir.IntType(64), _count_off)], name='list_count_addr') - _count_ptr = Gen.builder.bitcast( - _count_addr, ir.PointerType(ir.IntType(64)), name='list_count_ptr') - return Gen._load(_count_ptr, name='list_count') self._FailFastLenUnsupported(arg_node, Gen, val, f"len() 参数类型 '{_matched_cn}' 没有 __len__ 方法") else: # 未在 Gen.structs 登记的 struct(opaque/匿名)→ fail-fast。 diff --git a/lib/core/Handles/HandlesExprCall.py b/lib/core/Handles/HandlesExprCall.py index 108b8aa..1b1c705 100644 --- a/lib/core/Handles/HandlesExprCall.py +++ b/lib/core/Handles/HandlesExprCall.py @@ -3031,17 +3031,6 @@ class ExprCallHandle(BaseHandle): Gen._generic_spec_error = f'{type(_spec_err).__name__}: {_spec_err}' return cached_name: str = cached[0] - was_declare_only: bool = cached[1] - if not was_declare_only: - # 缓存声称已完整,但方法确实不存在:强制补发一次 - spec_cache[spec_key] = (cached_name, True) - try: - self.Trans.ClassHandler._specialize_generic_class( - base_name, _TypeArgs, Gen, - type_names=_TypeNames, declare_only=False) - except Exception as _spec_err: - Gen._generic_spec_error = f'强制补发失败: {type(_spec_err).__name__}: {_spec_err}' - return # 检查方法是否已有 define(blocks 非空表示已编译方法体) struct_sha1_map = getattr(Gen, '_struct_sha1_map', {}) class_sha1 = struct_sha1_map.get(cached_name) @@ -3942,22 +3931,6 @@ class ExprCallHandle(BaseHandle): adjusted = Gen._adjust_args(call_args_fb, func) result = Gen.builder.call(func, adjusted, name=f"call_{FullMethodName}") return result - if ClassName.startswith('list[') and ClassName in Gen.structs: - # 泛型特化方法未生成时,回退到裸模板 list 的同名方法 - struct_type = Gen.structs[ClassName] - self_ptr_type = ir.PointerType(struct_type) - BareFuncName: str = f'list.{MethodName}' - func = Gen._find_function(BareFuncName) - if func is not None: - if isinstance(ObjVal.type, ir.PointerType) and ObjVal.type.pointee == struct_type: - call_self = ObjVal - else: - call_self = Gen.builder.bitcast(ObjVal, self_ptr_type, name=f"method_self_{ClassName}") - call_args_fb = [call_self] + CallArgs - self._fill_default_args(call_args_fb, func, BareFuncName) - self._append_eh_msg_out_arg(call_args_fb, func, Gen) - adjusted = Gen._adjust_args(call_args_fb, func) - return Gen.builder.call(func, adjusted, name=f"call_{BareFuncName}") _spec_diag: str = getattr(Gen, '_generic_spec_error', '') raise Exception( f"Undefined method '{MethodName}' in class '{ClassName}' " @@ -4161,20 +4134,6 @@ class ExprCallHandle(BaseHandle): result = self.Trans.ExprUtils._try_operator_overLoad(_matched_cn, '__len__', val, Gen) if result is not None: return result - if _matched_cn.startswith('list['): - try: - _count_off: int | None = Gen._get_member_offset('__count__', _matched_cn, pointee) - except Exception: - # 特化结构体尚未展开布局(opaque):_list.vp 的 list 依次为 - # __data__(ptr) / __count__ / __capacity__ / __pool__ / ... - _count_off = 8 - if _count_off is not None: - _i8p = Gen.builder.bitcast(val, ir.PointerType(ir.IntType(8)), name='list_i8p') - _count_addr = Gen.builder.gep( - _i8p, [ir.Constant(ir.IntType(64), _count_off)], name='list_count_addr') - _count_ptr = Gen.builder.bitcast( - _count_addr, ir.PointerType(ir.IntType(64)), name='list_count_ptr') - return Gen._load(_count_ptr, name='list_count') self._FailFastLenUnsupported(arg_node, Gen, val, f"len() 参数类型 '{_matched_cn}' 没有 __len__ 方法") else: # 未在 Gen.structs 登记的 struct(opaque/匿名)→ fail-fast。 diff --git a/lib/core/Handles/HandlesExprUtils.py b/lib/core/Handles/HandlesExprUtils.py index 2be7a99..7d8b087 100644 --- a/lib/core/Handles/HandlesExprUtils.py +++ b/lib/core/Handles/HandlesExprUtils.py @@ -178,7 +178,7 @@ class ExprUtils: if not Gen._has_function(FullMethodName): FullMethodName = f'{ClassName}.{op_name}__' if not Gen._has_function(FullMethodName) and '[' in ClassName: - # 泛型特化方法尚未生成时,先补发特化,再回退裸模板类(如 list.__len__) + # 泛型特化方法尚未生成时,先补发特化 try: self.Trans.ExprCallHandle._try_complete_generic_specialization(ClassName, op_name, Gen) except Exception: @@ -186,18 +186,6 @@ class ExprUtils: FullMethodName = f'{ClassName}.{op_name}' if not Gen._has_function(FullMethodName): FullMethodName = f'{ClassName}.{op_name}__' - if not Gen._has_function(FullMethodName): - _SpecTy: Any = Gen.structs.get(ClassName) - _SpecName: str = getattr(_SpecTy, 'name', '') if _SpecTy is not None else '' - if _SpecName: - FullMethodName = f'{_SpecName}.{op_name}' - if not Gen._has_function(FullMethodName): - FullMethodName = f'{_SpecName}.{op_name}__' - if not Gen._has_function(FullMethodName): - _BareClass: str = ClassName.split('[', 1)[0] - FullMethodName = f'{_BareClass}.{op_name}' - if not Gen._has_function(FullMethodName): - FullMethodName = f'{_BareClass}.{op_name}__' if not Gen._has_function(FullMethodName): # 多继承:沿 MRO 祖先链查找 dunder 方法(先声明父类优先,与 VPC 一致) for anc in Gen._get_mro_chain(ClassName)[1:]: diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index d12af69..0a5465b 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -68,12 +68,6 @@ def _IsVoidOrDeclAnnotation(Annot: ast.AST) -> bool: return Annot.value is None if isinstance(Annot, ast.Subscript): return _IsVoidOrDeclAnnotation(Annot.value) - if isinstance(Annot, ast.Attribute): - # 兼容旧 AST:t.CVoid / t.State / t.CExport / t.CExtern - return getattr(Annot, 'attr', '') in ('CVoid', 'State', 'CExport', 'CExtern') - if isinstance(Annot, ast.Name): - # 兼容旧 AST:裸标记名 - return Annot.id in ('CVoid', 'State', 'CExport', 'CExtern') return False diff --git a/lib/core/Handles/HandlesImports.py b/lib/core/Handles/HandlesImports.py index 87266e9..d16f0eb 100644 --- a/lib/core/Handles/HandlesImports.py +++ b/lib/core/Handles/HandlesImports.py @@ -1270,11 +1270,6 @@ class ImportHandle(BaseHandle): """ if annotation is None: return None - if isinstance(annotation, ast.BinOp) and isinstance(annotation.op, ast.BitOr): - Line: int = getattr(annotation, 'lineno', 0) or 0 - raise TypeError( - f"[TPC] 不支持类型联合 'T1 | T2'(第 {Line} 行);" - f"类型注解只能是单一类型:指针请写 CPtr[T],修饰符请用关键字") if isinstance(annotation, ast.Subscript): _base: ast.AST = annotation.value _bn: str = '' @@ -1418,11 +1413,6 @@ class ImportHandle(BaseHandle): IsCDefine = True elif 'typedef' in _GlobalMarkers: IsCTypedef = True - elif isinstance(Node.annotation, ast.Name): - if Node.annotation.id == 'CDefine': - IsCDefine = True - elif Node.annotation.id == 'CTypedef': - IsCTypedef = True if IsCTypedef: # 检查符号是否已存在且已正确解析(OriginalType 已设置),避免覆盖 @@ -1627,11 +1617,6 @@ class ImportHandle(BaseHandle): llvm_str = CTypeRegistry.NameToLLVM(value_node.id) if llvm_str: return llvm_str - elif isinstance(value_node, ast.BinOp) and isinstance(value_node.op, ast.BitOr): - Line: int = getattr(value_node, 'lineno', 0) or 0 - raise TypeError( - f"[TPC] 不支持类型联合 'T1 | T2'(第 {Line} 行);" - f"类型注解只能是单一类型:指针请写 CPtr[T],修饰符请用关键字") elif isinstance(value_node, ast.Subscript): base_node: ast.AST = value_node.value base_name: str | None = ( @@ -1667,16 +1652,7 @@ class ImportHandle(BaseHandle): def _check_annotation_for_state(self, annotation: ast.AST) -> bool: Markers: tuple[str, ...] = tuple(getattr(annotation, 'Markers', None) or ()) - if 'export' in Markers or 'extern' in Markers or 'state' in Markers: - return True - # 兼容旧 AST:修饰词曾是联合注解的一翼 / 裸标记名。 - if isinstance(annotation, ast.Subscript): - return (AnnotationContainsName(annotation.value, 'CExport') or - AnnotationContainsName(annotation.value, 'CExtern') or - AnnotationContainsName(annotation.value, 'State')) - return (AnnotationContainsName(annotation, 'CExport') or - AnnotationContainsName(annotation, 'CExtern') or - AnnotationContainsName(annotation, 'State')) + return 'export' in Markers or 'extern' in Markers or 'state' in Markers def _check_decorators_for_state(self, Node: ast.FunctionDef) -> bool: """检查装饰器列表中是否包含 @CExport / @CExtern / @State(CExport 既能作返回值注解也能作装饰器)""" diff --git a/lib/vast/__init__.py b/lib/vast/__init__.py index 8c8cd45..c48799b 100644 --- a/lib/vast/__init__.py +++ b/lib/vast/__init__.py @@ -55,29 +55,38 @@ def _ParsePure(source: str, mode: str) -> AST: raise ValueError(f"invalid mode {mode!r}") -# C 加速解析器(vast_c 扩展):可用则优先,输出与 vast.parse 结构完全一致。 -# VAST_USE_C=0 禁用 C 路径;=strict 时 C 路径异常直接抛出(fail-fast)。 +# C 加速解析器(vast_c 扩展):必需依赖,输出与 vast.parse 结构完全一致。 +# VAST_USE_C=0 显式选择纯 Python;=strict 时 C 路径异常直接抛出(fail-fast)。 +# 扩展不可用或产物早于 vast_c.c 时直接抛错(提示重建),不做静默回退。 # -# 回退策略(响亮回退):C 路径抛异常时回退纯 Python,并向 stderr 打印一行可诊断 +# 运行时 C 路径抛异常时回退纯 Python(响亮回退):向 stderr 打印一行可诊断 # 信息(文件名 + 异常)。该回退**不会**改变产出——纯 Python 是本包语义基准, # 故绝不静默产出与纯 Python 不同的 AST。连续相同的(文件, 异常)只打印一次。 -_VAST_C_PARSE = None -_VAST_C_STALE = False +_VastCBuildHint: str = ( + "[TPC] 请重建 vast C 扩展:按 lib/vast_c/vast_c.c 头部注释的 gcc 命令" + "生成 lib/vast_c/_parser.pyd 后重试。") + +_VastCDir: str = _os.path.join(_os.path.dirname(_os.path.abspath(__file__)), '..', 'vast_c') +_VastCSrc: str = _os.path.join(_VastCDir, 'vast_c.c') try: - import glob as _glob - _vast_c_dir: str = _os.path.join(_os.path.dirname(_os.path.abspath(__file__)), '..', 'vast_c') - _vast_c_src: str = _os.path.join(_vast_c_dir, 'vast_c.c') - _vast_c_pyd: list[str] = _glob.glob(_os.path.join(_vast_c_dir, '_parser*.pyd')) - if _vast_c_pyd and _os.path.exists(_vast_c_src): - if max(_os.path.getmtime(_f) for _f in _vast_c_pyd) < _os.path.getmtime(_vast_c_src): - _VAST_C_STALE = True -except Exception: - _VAST_C_STALE = False -if not _VAST_C_STALE: - try: - from lib.vast_c import parse as _VAST_C_PARSE - except Exception: - _VAST_C_PARSE = None + _VastCPyd: list[str] = [ + _os.path.join(_VastCDir, _f) + for _f in _os.listdir(_VastCDir) + if _f.startswith('_parser') and _f.endswith('.pyd')] +except OSError: + _VastCPyd = [] +if _VastCPyd and _os.path.exists(_VastCSrc): + if max(_os.path.getmtime(_f) for _f in _VastCPyd) < _os.path.getmtime(_VastCSrc): + raise ImportError( + "[TPC] vast C 扩展 (_parser.pyd) 早于 vast_c.c,产物已过期。" + + _VastCBuildHint) + +try: + from lib.vast_c import parse as _VAST_C_PARSE +except Exception as _e: + raise ImportError( + f"[TPC] vast C 扩展不可用({type(_e).__name__}: {_e})。" + _VastCBuildHint + ) from _e _CFallbackSeen: set = set() diff --git a/lib/vast_c/_parser.pyd b/lib/vast_c/_parser.pyd index c41ca2ce58d68718bf684e3c0e606e0c68a19403..0af9c167ef80cf09512f75045045f1d63c2c7a8b 100644 GIT binary patch delta 72257 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®Ed<;%D=?kDG^o9{KL?V3U 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 a%=LA-H~jnZAGb9hb&u~B@^#p)^Zf(8MSP0@ delta 69707 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 d>4Nj#bkk#2F(Tbm%Q