fix(structgen): 跨模块 struct 兜底命名改查 _struct_sha1_map,修复 7cadfe07e983fd90.Translator 前缀错位
泛型特化 _specialize_generic_class 把 Gen.module_sha1 切换到模板定义模块 (_list=7cadfe07e983fd90)的窗口内,_generate_structs Step 1 对不在 class_sha1_map 的类(因 LlvmGenerator 共享 class_methods 跨文件泄漏而 缺条目)用 _mangle_name 兜底,错误注册为 7cadfe07e983fd90.Translator 等 跨模块类型 → Translator.__before_init__ self 类型错前缀,与构造 result (6ccfee1e5bd522ed.Translator*)不匹配,llvm 报 Type of #1 arg mismatch。 兜底改为优先查 _struct_sha1_map(Phase2 从 vpi 扫描构建的正确类→模块映射), 特化类自身仍走 _mangle_name(用模板 sha1 命名是设计意图)。
This commit is contained in:
1 parent
7e710d1e9a
commit
3b5f2af838
1 file changed
+8
@@ -253,6 +253,14 @@ class StructGenMixin:
|
||||
# 否则会创建缺少基类字段(如 GSListNode.Next)的本地类型定义,
|
||||
# 导致字段索引错位 → 访问违规崩溃。
|
||||
_imported_sha1: str = self.class_sha1_map.get(ClassName, '')
|
||||
if not _imported_sha1:
|
||||
# 兜底查全局类→模块映射:class_sha1_map 可能因共享 class_methods
|
||||
# 跨文件泄漏而缺失条目(LlvmGenerator 共享赋值),此时若处于
|
||||
# 泛型特化窗口(module_sha1 被切为模板定义模块如 _list 的 sha1),
|
||||
# _mangle_name 会用错误前缀注册其它模块的类
|
||||
# (7cadfe07e983fd90.Translator 跨模块类型错位根因)。
|
||||
# _struct_sha1_map 由 Phase2 从 vpi 扫描构建,含全部类的正确模块映射。
|
||||
_imported_sha1 = self._struct_sha1_map.get(ClassName, '')
|
||||
if _imported_sha1:
|
||||
mangled_name: str = f"{_imported_sha1}.{ClassName}"
|
||||
else:
|
||||
|
||||
Reference in new issue
Block a user