From ed76f772189f9f8f7e89e74d8bd8bafaf3d8419b Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 19 Oct 2026 14:55:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(extern):=20worker=20=E5=90=88=E5=B9=B6=20si?= =?UTF-8?q?g=5Ffiles=20=E8=A1=A5=E5=85=A8=20extern=20=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 共享 export_extern_funcs 可能因 sig_files 过滤缺少 include 模块(win32process.ReadProcessMemory 等);worker 内从 sig_files 合并补全。 --- lib/Projectrans/Phase2Translator.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index dcff7a9..24208bd 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -2392,7 +2392,20 @@ class Phase2Translator: trans.translator._source_module_sig_files = self._shared_source_module_sig_files trans.translator._all_define_constants = self._shared_all_dc trans.translator._define_decl_types = self._shared_all_decl_types - trans.translator._export_extern_funcs = self._shared_export_extern_funcs + # 共享集合可能因 sig_files 过滤而缺少 include 模块的 extern 声明; + # 这里从本 translator 的 sig_files 合并补全(跨模块 extern 必须裸名)。 + _combined_extern: dict[str, str] = dict(self._shared_export_extern_funcs) + for _sha1_key, _sig_path in self.sig_files.items(): + try: + _, _sig_tree = parse_python_file(_sig_path) + if _sig_tree is None: + continue + for _node in ast.iter_child_nodes(_sig_tree): + if isinstance(_node, ast.FunctionDef) and _IsExportExternFuncNode(_node): + _combined_extern[_node.name] = _sha1_key + except Exception: + continue + trans.translator._export_extern_funcs = _combined_extern if self._shared_generic_class_templates: if not hasattr(trans.translator.ClassHandler, '_generic_class_templates'): trans.translator.ClassHandler._generic_class_templates = {}