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:
1 parent
98efd9b1d2
commit
ec4fb0bcf8
1 file changed
+5
-5
@@ -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(
|
||||
|
||||
Reference in new issue
Block a user