Commit Graph
2 Commits
Author SHA1 Message Date
TermiNexus f703fdaf23 test(NoVTableCrossMixinTest): 扩展三段式覆盖——多级 Mixin 链 + 第二父类 this_adjust
Test 2:Combined2(MixinB2(MixinA2), MixinC2) 多级链——MixinC2.outer2 调兄弟 MixinB2.mid2,mid2 调父类 MixinA2.inner2 并写字段,验证链式 this_adjust。

Test 3:Combined3(PtrMixin, DataMixin)——DataMixin 第二父类字段区偏移非 0,get_val 内 self.val 需 this_adjust;含指针字段 get_name。
2026-08-21 01:16:32 +08:00
TermiNexus bd5d2467ab fix(exprcall): NoVTable 跨 Mixin self. 调用按定义类解析 + this 前移
缺陷(TPV bootstrap 的 undefined symbol: <sha1>.StmtGenDeclMixin.translate_return
同根因):NoVTable 多继承下,BaseB.caller 内 self.helper()(helper 定义在兄弟
Mixin BaseA,经 Combined(BaseA, BaseB) 组合)被 mangle 成 BaseB.helper —— 用
调用者类做前缀,而定义符号是 BaseA.helper -> ld.lld undefined symbol。

修复(HandlesExprCall.py):
1. 调用端 MRO 回退失败后,全局扫描已注册类找方法定义类(兄弟 Mixin 兜底);
2. _adjust_this_for_inherited_method 支持"调用类不含定义类字段"场景:
   this 按组合布局前移 sizeof(定义类 struct)(BaseB* -> BaseA*)。

新增 Test/NoVTableCrossMixinTest 回归(caller()==42 通过),TestsOverview 记录。
2026-08-20 10:23:47 +08:00