TermiNexus
467e62a45e
fix(tpc): 继承前缀配槽改用 elements 快照,不再对已被重置为 None 的 body 下标
类别:a(编译器缺陷)—— 裸 Python TypeError 崩溃 + 外层静默吞掉整条类声明。
现场:编译 includes/ast/astaux.vp 时
HandlesImports.py:2526 `_inherited_ph.append((_nm_ph, _st.elements[_slot0_ph + _i_ph]))`
→ TypeError: 'NoneType' object is not subscriptable
(栈由 VLogger.warning 打印 exc_info 后首次可见;外层 HandlesImports.py:647
`except Exception` 只 WARN "忽略节点 ClassDef" 就 continue ⇒ 该类声明整条
被静默丢弃,类型解析退化。)
根因(TOCTOU):guard 在 :2500 通过(elements is not None),但两侧之间
`_ResolveInheritedFieldNames`(:2535)会加载父类成员:
_ResolveInheritedFieldNames → _TryLoadClassMembersFromPyi
→ _EmitExternalClassDeclLlvm → _generate_structs
而 `_generate_structs` 判定"struct body 与 class_members 不一致"时会**主动**
`existing_st.elements = None`(StructGen.py:579/:590,既有机制,为强制重新派生)
⇒ 配对时读到的 elements 已变 None。
修复:guard 通过时立即对 elements 取快照 `_elements_ph`,槽位数与槽位类型取自
**同一时刻**的布局(`_num_elements` 本就取自它,二者必须同源);配对用快照,
不再触碰可能被重入重置的 `_st.elements`。无重入时行为与改前逐字节一致。
2026-09-29 16:26:43 +08:00
..
2026-08-21 12:36:00 +08:00
2026-09-29 14:53:33 +08:00
2026-08-17 09:36:38 +08:00
2026-09-29 13:50:44 +08:00
2026-09-26 19:27:22 +08:00
2026-09-27 00:19:44 +08:00
2026-09-29 12:04:20 +08:00
2026-09-26 19:27:22 +08:00
2026-09-29 13:13:17 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 15:10:39 +08:00
2026-09-29 13:00:11 +08:00
2026-09-29 12:23:54 +08:00
2026-09-29 13:50:44 +08:00
2026-09-29 13:50:44 +08:00
2026-09-11 22:47:21 +08:00
2026-09-28 15:10:39 +08:00
2026-09-27 15:16:08 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 13:57:04 +08:00
2026-09-29 13:50:44 +08:00
2026-08-17 09:36:38 +08:00
2026-09-29 16:26:43 +08:00
2026-09-29 11:21:19 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 15:10:39 +08:00
2026-09-26 19:27:22 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 23:59:29 +08:00
2026-08-03 02:00:49 +08:00
2026-09-26 19:27:22 +08:00