refactor(tpv): ClassGenVTable 的 self._mangle_name 统一为 self.Gen.FuncGenBase 显式调用

- 继承链 ClassGenVTable→ClassGenBase(无父类)不含 FuncGenBase,
  5 处 self._mangle_name 沿 MRO 解析不到定义(依赖编译器兜底)
- 统一为 self.Gen.FuncGenBase._mangle_name(对齐项目其他 Mixin 写法)
This commit is contained in:
TermiNexus committed 2026-08-29 07:16:43 +08:00
1 parent 98efd9b1d2
commit ec4fb0bcf8
1 file changed
+5 -5
+5 -5
View File
@@ -400,7 +400,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase):
func: llvmlite.Function | t.CPtr = self.Gen.CallGenLeafKit.find_func_global(full_name)
else:
# 当前类方法: 用当前模块 SHA1
mangled_name: str = self._mangle_name(trans, full_name)
mangled_name: str = self.Gen.FuncGenBase._mangle_name(trans, full_name)
func: llvmlite.Function | t.CPtr = self.Gen.CallGenLeafKit.find_func_in_table(
trans._funcs, trans._func_count, full_name)
# 当前模块表找不到时,回退到全局表
@@ -469,7 +469,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase):
if vtable_name_buf is None:
return 0
viperlib.snprintf(vtable_name_buf, 128, "%s.vtable", class_name)
vtable_mangled: str = self._mangle_name(trans, vtable_name_buf)
vtable_mangled: str = self.Gen.FuncGenBase._mangle_name(trans, vtable_name_buf)
# 5. 创建全局变量
gv: llvmlite.GlobalVariable | t.CPtr = llvmlite.new_global_variable(
@@ -710,7 +710,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase):
full_name: str = full_name_buf
# SHA1 命名空间混淆
mangled_name: str = self._mangle_name(trans, full_name)
mangled_name: str = self.Gen.FuncGenBase._mangle_name(trans, full_name)
# 推断返回类型
ret_ty: llvmlite.LLVMType | t.CPtr = None
@@ -1152,7 +1152,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase):
viperlib.snprintf(full_name_buf, 128, "%s.__before_init__", class_name)
full_name: str = full_name_buf
mangled_name: str = self._mangle_name(trans, full_name)
mangled_name: str = self.Gen.FuncGenBase._mangle_name(trans, full_name)
# 创建函数
func: llvmlite.Function | t.CPtr = llvmlite.create_function(
@@ -1229,7 +1229,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase):
if vt_name_buf is not None:
viperlib.snprintf(vt_name_buf, 128, "%s.vtable", class_name)
vt_full_name: str = vt_name_buf
vt_mangled: str = self._mangle_name(trans, vt_full_name)
vt_mangled: str = self.Gen.FuncGenBase._mangle_name(trans, vt_full_name)
# GEP 到 __vtable__ 字段(索引 0)
vt_slot: llvmlite.Value | t.CPtr = llvmlite.build_gep_struct(