fix(mangle): 仅 extern 函数保持裸名
删除 _export_funcs 裸名分支,普通 def/export def 恢复模块 SHA1 前缀,消除 os getcwd/system 等重复符号。
This commit is contained in:
1 parent
80b7ce5bb1
commit
21c76541e5
1 file changed
-25
@@ -1212,31 +1212,6 @@ class BaseGenMixin:
|
||||
if name in self._export_extern_funcs:
|
||||
# extern def 一律使用裸名(C/Win32 符号不加模块 SHA1 前缀)
|
||||
return name
|
||||
if name in self._export_funcs and not module_name:
|
||||
return name
|
||||
if name in self._export_extern_funcs:
|
||||
target_sha1: str = self._export_extern_funcs[name]
|
||||
if module_name:
|
||||
# 显式带 module_name 调用(如 stdlib.system):即使当前模块定义了同名函数,
|
||||
# 也应按模块匹配 extern,返回裸名。snprintf 之所以工作而 system 不工作,
|
||||
# 就是因为 os._win32 定义了自己的 system 包装,导致旧逻辑跳过了 extern 匹配。
|
||||
if module_name == target_sha1:
|
||||
return name
|
||||
if module_name in self.ModuleSha1Map and self.ModuleSha1Map[module_name] == target_sha1:
|
||||
return name
|
||||
init_name: str = f"{module_name}.__init__"
|
||||
if init_name in self.ModuleSha1Map and self.ModuleSha1Map[init_name] == target_sha1:
|
||||
return name
|
||||
# 兜底:module_name 不在 ModuleSha1Map 中或 sha1 不匹配,
|
||||
# 但函数在 _export_extern_funcs 中(C extern 不应混淆),
|
||||
# 仅当当前模块未定义同名函数时才返回裸名。
|
||||
if name not in self._current_module_func_names:
|
||||
return name
|
||||
elif name not in self._current_module_func_names:
|
||||
# 无 module_name 调用(如 from stdlib import system; system()):
|
||||
# 仅当当前模块未定义同名函数时才返回 extern 裸名,
|
||||
# 否则让本地定义走正常 mangle 路径(本地 def 遮蔽 import 语义)。
|
||||
return name
|
||||
# main 函数作为程序入口点,永远不混淆
|
||||
if name == 'main':
|
||||
return name
|
||||
|
||||
Reference in new issue
Block a user