refactor: 提取 _lookup_sha1_from_modname_raw,消除 HandlesExpr 重复的模块 SHA1 查找段
This commit is contained in:
1 parent
0665ee1164
commit
94ae2aee52
2 files changed
+15
-21
No files matched your search
@@ -1414,27 +1414,8 @@ def _lookup_cross_module_cdefine(pool: memhub.MemBuddy | t.CPtr,
|
||||
return sub_val
|
||||
return -1
|
||||
|
||||
# 2. 复制模块名到新缓冲区(lookup_from_import 返回的是内部指针)
|
||||
# 截断于空格、null、或 ':'(别名格式的分隔符)
|
||||
mod_len: t.CSizeT = 0
|
||||
while mod_name_raw[mod_len] != ' ' and mod_name_raw[mod_len] != '\0' and mod_name_raw[mod_len] != ':':
|
||||
mod_len += 1
|
||||
mod_name_buf: str = pool.alloc(mod_len + 1)
|
||||
if mod_name_buf is None:
|
||||
return -1
|
||||
for mi in range(mod_len):
|
||||
mod_name_buf[mi] = mod_name_raw[mi]
|
||||
mod_name_buf[mod_len] = '\0'
|
||||
|
||||
# 3. 去掉相对导入的前导点
|
||||
base_mod: str = mod_name_buf
|
||||
while base_mod[0] == '.':
|
||||
base_mod = base_mod + 1
|
||||
|
||||
# 4. 查找模块的 SHA1
|
||||
sha1: str = HandlesExprCall._lookup_module_sha1(base_mod)
|
||||
if sha1 is None:
|
||||
sha1 = HandlesExprCall._lookup_module_sha1_suffix(base_mod)
|
||||
# 2. 截断模块名 → 去前导点 → 精确+后缀查找 SHA1(复用 HandlesExprCall 公共逻辑)
|
||||
sha1: str = HandlesExprCall._lookup_sha1_from_modname_raw(pool, mod_name_raw)
|
||||
if sha1 is None:
|
||||
return -1
|
||||
|
||||
|
||||
@@ -115,6 +115,19 @@ def _lookup_mod_sha1(pool: memhub.MemBuddy | t.CPtr,
|
||||
from_imports, class_name, allow_star_fallback)
|
||||
if mod_name_raw is None:
|
||||
return None
|
||||
return _lookup_sha1_from_modname_raw(pool, mod_name_raw)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# _lookup_sha1_from_modname_raw - 原始模块名 → SHA1
|
||||
#
|
||||
# 截断模块名(lookup_from_import 返回内部指针,空格/冒号/null 分隔),
|
||||
# 去掉相对导入前导点,再精确+后缀查找 SHA1。
|
||||
# 供 _lookup_mod_sha1 与 HandlesExpr._lookup_cross_module_cdefine 复用。
|
||||
# ============================================================
|
||||
def _lookup_sha1_from_modname_raw(pool: memhub.MemBuddy | t.CPtr,
|
||||
mod_name_raw: str) -> str:
|
||||
"""从原始模块名查找 SHA1,返回 None=未找到"""
|
||||
# 手动找到模块名结束位置(空格、null、或 ':' 别名分隔符),复制到新缓冲区
|
||||
mod_len: t.CSizeT = 0
|
||||
while mod_name_raw[mod_len] != ' ' and mod_name_raw[mod_len] != '\0' and mod_name_raw[mod_len] != ':':
|
||||
|
||||
Reference in new issue
Block a user