TermiNexus
0e5ebd07ba
fix(TypeGenCType): 撤销在子类类体重复声明父类字段(TypeGenBase 已声明),修指针隐式转整数误报
上一版(6a287b9)为修 Repl.vp:802 在 TypeGenCType 类体补了 5 个字段,但这 5 个
(CTypedefNames / CTypedefTypeStrs / CTypedefNameIdx / CTypedefNameIdxCap /
CTypedefNameIdxBuilt)**本就由父类 TypeGenBase 在类体声明**(TypeGenBase.vp:73-84),
属重复声明(c 源码违规)。
后果(有实证):这 5 个名字进入子类"自有字段"后,HandlesImports._FlattenExt 的
继承前缀前置过滤器(HandlesImports.py:2516-2521,为防重复前置而按名字过滤)
把**同名继承项整条丢弃** ⇒ class_members['TypeGenCType'] 变成 [36 继承项]+[5 自有项]。
被丢掉的 5 项(继承下标 22/23/25/26/27)都排在 LastBuiltinsTypedefResult
(继承下标 32)之前,使其表内下标降为 27;NoVTable 类 base=0 ⇒ 命中 body 槽 27
= CTypedefNameIdxBuilt(i32) ⇒ TypeGenResolve.vp 的
`self.Gen.TypeGenCType.LastBuiltinsTypedefResult = "t.CPtr"` 触发
"指针隐式转整数已禁止:不能把指针类型 i8* 赋给整数类型 i32"。
该重复声明还会让父类方法(TypeGenBase.vp InitTypeMixinFields 等)与子类方法
访问同一字段落到不同槽(split-brain)。
撤销后:子类自有字段=0,继承前缀 41 项按原顺序保留,LastBuiltinsTypedefResult
回到表内下标 32 = body 槽 32(i8*,与 TypeGenBase 声明的 str 一致)。
说明:Repl.vp:802 的真实根因(引用模块里继承前缀是否可达)尚未定论,本次只撤销
误修、不掩盖;该类属性链失败现已由 TPC 侧新增记账(a18ca4da)逐条给出失败原因链。
2026-09-30 10:46:43 +08:00
..
2026-09-30 10:46:43 +08:00
2026-09-28 15:29:42 +08:00