fix(tpc): 跨模块模块级变量类登记与 Mod.Var.Field 链解析;并停止跟踪 __pycache__/*.pyc
This commit is contained in:
1 parent
9257dd841f
commit
015fbf17cf
100 files changed
+237
-1
No files matched your search
@@ -639,6 +639,28 @@ class BaseHandle:
|
||||
struct_keys: list[str] = [k for k in (getattr(Gen, 'structs', {}) or {})
|
||||
if _short(k) == _short(cn)]
|
||||
seg.append(f"structs_keys={struct_keys or 'NONE'}")
|
||||
# 模块别名链(Mod.Var.Field,如 CompilerFactory.factory.PermPool):
|
||||
# 最内层 Name 是**模块名**,上面的登记 dump(var_struct_class 等)对它
|
||||
# 恒为 None、无法定位断点。补逐跳诊断:Mod 的 sha1、`Mod.Var` 在全局量表
|
||||
# 里的候选键命中与类型,直接指出断在哪一跳。
|
||||
_chain: list[str] = []
|
||||
_cur: ast.AST = Node
|
||||
while isinstance(_cur, ast.Attribute):
|
||||
_chain.append(_cur.attr)
|
||||
_cur = _cur.value
|
||||
_chain.reverse()
|
||||
if _chain:
|
||||
_sha1_map2: Any = getattr(Gen, 'ModuleSha1Map', {}) or {}
|
||||
_gmap: Any = getattr(getattr(Gen, 'module', None), 'globals', {}) or {}
|
||||
_mod_sha: Any = _sha1_map2.get(var)
|
||||
seg.append(f"chain={var}.{'.'.join(_chain)} ModuleSha1Map[{var}]={_mod_sha!r}")
|
||||
_hop: str = _chain[0]
|
||||
_keys: list[str] = [f"{var}.{_hop}", _hop]
|
||||
if _mod_sha:
|
||||
_keys.append(f"{_mod_sha}.{_hop}")
|
||||
for _k in _keys:
|
||||
if _k in _gmap:
|
||||
seg.append(f"globals[{_k}]={_ty_str(_gmap[_k])}")
|
||||
return '\n'.join(seg)
|
||||
except Exception:
|
||||
return ''
|
||||
|
||||
Reference in new issue
Block a user