From ec4fb0bcf8ca28e03bd7099a60939368a7aec628 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 29 Aug 2026 07:16:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(tpv):=20ClassGenVTable=20=E7=9A=84=20s?= =?UTF-8?q?elf.=5Fmangle=5Fname=20=E7=BB=9F=E4=B8=80=E4=B8=BA=20self.Gen.F?= =?UTF-8?q?uncGenBase=20=E6=98=BE=E5=BC=8F=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 继承链 ClassGenVTable→ClassGenBase(无父类)不含 FuncGenBase, 5 处 self._mangle_name 沿 MRO 解析不到定义(依赖编译器兜底) - 统一为 self.Gen.FuncGenBase._mangle_name(对齐项目其他 Mixin 写法) --- App/lib/core/Gen/Class/ClassGenVTable.vp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/App/lib/core/Gen/Class/ClassGenVTable.vp b/App/lib/core/Gen/Class/ClassGenVTable.vp index 06a5a60..755e946 100644 --- a/App/lib/core/Gen/Class/ClassGenVTable.vp +++ b/App/lib/core/Gen/Class/ClassGenVTable.vp @@ -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(