TermiNexus
83453c68db
fix(HandlesImports): 解冻 struct 加载——缓存键缺失也删、索引陈旧定点再读、opaque 条目不再压住好 body
类别:a(编译器缺陷)。三处都会把"该类本 Gen 内始终 opaque"**永久固化**,
下游表现为 Repl.vp:802 `GenApi._g_gen.TypeGenCType.CTypedefNames` 报
"基座 pointee 未匹配 Gen.structs 中任何 struct(同短名候选=['TypeGenCType'],
全部未命中)"——而磁盘上 temp/<sha1>.stub.ll 明明有 41 槽 body。
1) `_TryLoadStructFromStub` 尾部缓存键删除判据:原只在"该键**有**实例且 opaque"时删;
若索引里**有该类的条目**、而该键此刻根本没有实例(例如只落了 sha1 全名键、短名键
尚未建立),这一轮的成功缓存被永久留下 ⇒ 之后每次同名查询都在入口直接 return。
现改为"无可用 body(缺失或 opaque)且索引有条目"即删键,失败可重试。
2) `_entry_priority`:把 `is_opaque` 提到 `is_temp` 之前。原顺序让**陈旧的 output 占位
条目压住 temp 里已有的好 body**(两侧都有 body 时仍保持 output > temp 原判据)。
3) 新增 `_ReReadStructBodyFromDisk`:`_build_stub_index` 只按"文件名集合"增量,假定
stub `只增不改`;而 Phase 2 会**原地重写** output/<sha1>.stub.ll(译文生成点 :2194、
依赖变化重组点 :1785-1790)⇒ 新 body 永不进索引。现在"选中的索引条目没有 body"
这条失败路径上按磁盘当前内容**定点再读一次**(只读那一个文件,取不到即维持原状)。
静态核验:compileall 通过;全仓 symtable 未定义名扫描 0 条。
2026-09-30 15:44:10 +08:00
..
2026-09-14 13:42:14 +08:00
2026-09-30 15:44:10 +08:00
2026-09-28 13:57:04 +08:00
2026-09-30 10:58:23 +08:00
2026-09-26 19:27:22 +08:00
2026-09-26 19:27:22 +08:00
2026-09-12 11:51:42 +08:00
2026-09-28 13:49:28 +08:00
2026-09-26 19:27:22 +08:00
2026-08-17 09:36:38 +08:00
2026-08-17 09:36:38 +08:00