fix(extern): 初始化并同步 LlvmGen._export_extern_funcs
translator 可能尚无该属性;getattr 初始化后 clear+update,并把同一 dict 引用同步到 LlvmGen,确保 _mangle_func_name 看到跨模块 extern。
This commit is contained in:
1 parent
f91fb7dcca
commit
d312d97bca
1 file changed
+18
-3
@@ -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):
|
||||
|
||||
Reference in new issue
Block a user