TermiNexus
b8ed33a200
fix(tpc): struct body 冻结前逐元素校验类型一致性(错位 body 不再被当"完整")
a 编译器缺陷:_generate_structs Step 4 判定既有 struct body 是否"完整"时只比
「元素个数 / 首元素是 vtable 指针 / 是否含 T 占位」—— **类型错位**的 body
(个数命中、元素名也全对,但某槽被冻结成通用多层指针)会被直接 continue;
而 llvmlite 的 set_body 只能设一次 ⇒ 错布局被永久冻结,后续 .vpi / .stub 重载
只修 class_members、改不了 body ⇒ 赋值时报「层数不同」。
现场(成员槽来源明细实锤:声明侧正确、布局侧坏):
class_members[Generator] 项数=47 base=0 下标=3
声明槽类型=%"d827f3045bd28467.TypeGenCDef"*
布局 struct name='fd4cd0ec583f42b9.Generator' 元素数=47 elements[3]=i8**
→ self.TypeGenCDef = SubTypeGenCDef
指针隐式转换已禁止(层数不同):不能把 %…TypeGenCDef"* 隐式转为 i8**
修法:新增 _MemberSlotAccepts(判据与存储侧同一套 _ClassifyPtrImplicitConvert),
把 class_members 声明类型与 elements[base+i] 逐项比对;只有**存储时必被拒绝**的
组合(层数不同 / 指针与非指针混位)判为不一致 ⇒ 走既有「清 _elements + 清 stub
缓存」路径重建布局(通用指针槽 i8*、继承上转、数组退让照旧放行,不误清)。
2026-09-29 00:06:11 +08:00
..
2026-09-14 13:42:14 +08:00
2026-09-29 00:06:11 +08:00
2026-09-28 13:57:04 +08:00
2026-09-28 18:25:57 +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