TermiNexus
43853bc455
fix(HandlesExprAttr): 基座 pointee 与 Gen.structs 的匹配补「同 sha1 前缀」与「同短名唯一候选」
现场(Repl.vp:802):`ct_names: list[str]* = GenApi._g_gen.TypeGenCType.CTypedefNames`
的基座 `.TypeGenCType` 取值后 pointee 为 `%"750b8c10137d273e.TypeGenCType"*`(= 撤销
6a287b9 后的新 sha1),而 Gen.structs(250 键)里没有该 IR 名的实例 ⇒ 旧判据只有
"身份相同 / IR 全名逐字相同" ⇒ 全部未命中 ⇒ 属性链求值为空 → 带注解赋值判定"无值可存"
而终止编译。(a18ca4da 的记账正是把"基座形态 / pointee / 键数"三项事实直接印了出来,
本轮不必再猜。)
改动(判据分级,强到弱;找不到仍留痕失败,不兜底造类型):
① 身份相同(原判据);
② IR 全名逐字相同(原判据,覆盖"同名第二份实例");
③ 同 sha1 前缀 —— IR 名形如 `<sha1>.<短名>`,前缀相等即"同一模块的同一类";
④ 同短名——**仅当候选唯一**时放行(调用点算 `_UniqShortCN`):两个及以上同名类无法
判定是哪一个,宁可留痕失败也不选错布局(同名类冲突在本仓一律以 sha1 全名区分)。
同时把"未命中"记账扩为:列出分级判据、同短名候选清单,以及"候选 >1 会被主动拒绝"。
验证:py_compile 通过;`_PointeeMatchesStruct` 冒烟 6 例(身份 / 同名第二份实例 /
同短名不同 sha1 / 裸短名 / 不同类 / 非 Identified 一侧)全部符合预期。
2026-09-30 12:20:20 +08:00
..
2026-09-30 12:20:20 +08:00
2026-09-30 11:57:07 +08:00
2026-09-28 13:57:04 +08:00
2026-07-18 19:25:40 +08:00
2026-08-17 09:36:38 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-09-29 13:17:36 +08:00
2026-07-30 16:33:56 +08:00
2026-09-26 19:27:22 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 18:14:45 +08:00
2026-07-18 19:25:40 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 18:14:45 +08:00
2026-09-28 18:25:57 +08:00
2026-09-29 13:17:36 +08:00
2026-07-18 19:25:40 +08:00
2026-09-29 13:17:36 +08:00
2026-07-18 19:25:40 +08:00
2026-09-29 16:16:01 +08:00