TermiNexus
bbd0cdbf62
fix(transpyv): 自引用类名归属加「表无关」判据,字段与形参不再分裂成两个特化名
类别 a(编译器缺陷):_norm_type_arg_name 规则 5.5 判定"正在定义的类"的裸名归属
时只认两条证据——struct 注册表(find_struct_by_module)与 ModuleClasses 登记表
(is_module_class)。自引用字段(includes/ast/base.vp `AST.children:
list[rawptr[AST]]`)在类定义体内解析时本类尚未 register_struct,而 ModuleClasses
的键是 pool 字符串,登记/查询受"表未就绪、键随 pool 回收"影响 ⇒ 两条都可能落空
⇒ 实参留在裸名 `list[rawptr[AST]]`,与同一注解在形参处(类已注册)解析出的
`list[rawptr<定义模块SHA1>.AST]` 分裂成两个特化名 ⇒ 被"非基本类型指针不可隐式
转换"拦下(现场:includes/ast/base.vp:359
`_append_child(self.children, node, self.pool)`,源 %"list[rawptr[AST]]"* →
目标 %"list[rawptr<sha1>.AST]"*)。
- StructGenMixin:新增 CurDefClassName —— 与 CurDefModuleSha1 同源同生命周期,
由 mark_module_class 在类定义入口(ClassGenDef 第 50 行,早于字段注解解析)
一并记录;InitStructGen / reset_visible_structs 同步清空。
- TypeGenResolve._norm_type_arg_name 规则 5.5:新增证据 ③(表无关)——查询名与
正在定义的类名逐字相同即判为本类,用 CurDefModuleSha1 加前缀。类名直接来自类
定义入口、不经任何表 ⇒ 自引用窗口内必然可判;证据 ② 失败时不再退回裸名。
2026-09-29 20:16:05 +08:00
..
2026-09-29 20:16:05 +08:00
2026-09-28 18:43:59 +08:00
2026-09-23 16:09:32 +08:00
2026-09-29 15:10:33 +08:00
2026-09-23 16:09:32 +08:00