chore(tpc): 移除属性链/调用分派错误路径的临时诊断打点

- HandlesBase: 删除 _AttrFailDiag 现场诊断(含模块别名链逐跳 dump),恢复精简错误信息

- HandlesExprAttr: 删除 [CHAIN-DBG] stderr 打点与 [attr-diag]/[attr-diag-nested] KeyError 包装

- HandlesExprCall: 删除 Unknown module 异常的 _rc_note 诊断后缀
This commit is contained in:
TermiNexus committed 2026-09-12 12:50:35 +08:00
1 parent ed3355202a
commit 355811d64e
3 files changed
+6 -155

No files matched your search

-77
View File
@@ -585,86 +585,9 @@ class BaseHandle:
msg: str = (f"{What}表达式 '{expr_text}' 编译期求值为空(属性访问未能解析出"
f"目标类型/成员),赋值将被跳过、变量保持未初始化。位置 {loc}"
f"{(',源码: ' + code_line) if code_line else ''}")
# 现场诊断:dump 最内层基变量在各类注册表/存储中的状态,定位属性解析
# 在哪一级断裂(var_struct_class 缺失 / struct 键形态不匹配 / 存储退化)。
diag: str = self._AttrFailDiag(Node, Gen)
if diag:
msg += f"\n[ATTR-DIAG]{diag}"
_vlog().compile_error(msg, src_file, lineno, code_line)
sys.exit(1)
@staticmethod
def _AttrFailDiag(Node: ast.AST, Gen: Any) -> str:
"""提取属性链失败现场:最内层 Name 变量的类登记与存储状态"""
try:
inner: ast.AST = Node
while isinstance(inner, ast.Attribute):
inner = inner.value
if not isinstance(inner, ast.Name):
return ''
var: str = inner.id
seg: list[str] = []
seg.append(f"var={var}")
vsc: Any = getattr(Gen, 'var_struct_class', {}) or {}
gsc: Any = getattr(Gen, 'global_struct_class', {}) or {}
seg.append(f"var_struct_class[{var}]={vsc.get(var)!r}")
seg.append(f"global_struct_class[{var}]={gsc.get(var)!r}")
def _ty_str(ptr: Any) -> str:
try:
if ptr is None:
return 'None'
return str(ptr.type)
except Exception:
return '?'
for _tab_name, _tab in (('variables', getattr(Gen, 'variables', {}) or {}),
('_reg_values', getattr(Gen, '_reg_values', {}) or {}),
('_direct_values', getattr(Gen, '_direct_values', {}) or {}),
('global_vars', getattr(Gen, 'global_vars', {}) or {})):
if var in _tab:
seg.append(f"{_tab_name}[{var}]={_ty_str(_tab[var])}")
# 最内层类名 → 是否在 class_member_element_class 登记字段
cn: Any = vsc.get(var) or gsc.get(var)
cmap: Any = getattr(Gen, 'class_member_element_class', {}) or {}
import re as _re
def _short(k: str) -> str:
return _re.sub(r'^[0-9a-fA-F]{16}\.', '', k)
if cn:
hit: list[str] = []
for key, sub in cmap.items():
if _short(key) == _short(cn):
hit.append(f"{key}:{sub}")
seg.append(f"elem_class_map_hits={hit or 'NONE'}")
# Gen.structs 中含 cn 短名的键(供键形态比对)
if cn:
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 ''
def HandleBodyLlvm(self, Body: ast.AST | list[ast.stmt]) -> Any:
return self.Trans.BodyHandler.HandleBodyLlvm(Body)