fix(extern): 初始化并同步 LlvmGen._export_extern_funcs

translator 可能尚无该属性;getattr 初始化后 clear+update,并把同一 dict 引用同步到 LlvmGen,确保 _mangle_func_name 看到跨模块 extern。
This commit is contained in:
TermiNexus committed 2026-10-19 15:29:38 +08:00
1 parent f91fb7dcca
commit d312d97bca
1 file changed
+18 -3
+18 -3
View File
@@ -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):