From d312d97bcaad69735e791b9cf880c72312f5fe17 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 19 Oct 2026 15:29:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(extern):=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=B9=B6=E5=90=8C=E6=AD=A5=20LlvmGen.=5Fexport=5Fextern=5Ffunc?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit translator 可能尚无该属性;getattr 初始化后 clear+update,并把同一 dict 引用同步到 LlvmGen,确保 _mangle_func_name 看到跨模块 extern。 --- lib/Projectrans/Phase2Translator.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index 3f1b8fc..42322f4 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -2405,8 +2405,15 @@ class Phase2Translator: _combined_extern[_node.name] = _sha1_key except Exception: continue - trans.translator._export_extern_funcs.clear() - trans.translator._export_extern_funcs.update(_combined_extern) + _extern_dict = getattr(trans.translator, '_export_extern_funcs', None) + if _extern_dict is None: + _extern_dict = {} + trans.translator._export_extern_funcs = _extern_dict + _extern_dict.clear() + _extern_dict.update(_combined_extern) + _llvm_gen = getattr(trans.translator, 'LlvmGen', None) + if _llvm_gen is not None: + _llvm_gen._export_extern_funcs = _extern_dict if self._shared_generic_class_templates: if not hasattr(trans.translator.ClassHandler, '_generic_class_templates'): trans.translator.ClassHandler._generic_class_templates = {} @@ -2428,7 +2435,15 @@ class Phase2Translator: raise _vlog().warning(f"收集导出外部函数声明失败: {_e}", "Exception") if export_extern_funcs: - trans.translator._export_extern_funcs.update(export_extern_funcs) + _extern_dict2 = getattr(trans.translator, '_export_extern_funcs', None) + if _extern_dict2 is None: + trans.translator._export_extern_funcs = dict(export_extern_funcs) + _extern_dict2 = trans.translator._export_extern_funcs + else: + _extern_dict2.update(export_extern_funcs) + _llvm_gen2 = getattr(trans.translator, 'LlvmGen', None) + if _llvm_gen2 is not None: + _llvm_gen2._export_extern_funcs = _extern_dict2 for includes_dir in self.include_dirs: if os.path.isdir(includes_dir):