TermiNexus
d63787f8fc
fix(TypeGenResolve): 「保留裸名」取证对 CTypedef/内置标量/泛型形参不再报 ERROR
【b 机制漏豁免】取证日志(df1244d 加入)的前提是"这是个**类名**":只有类名存在
"{定义模块SHA1}.类" 这第二个 mangling 形式,留裸名才可能与它分裂。CTypedef /
语言内置标量 / 泛型形参的名域就是它自身,保留裸名即规范形式(TPC 侧
SymbolUtils.NormalizeGenericArgName 同口径),对它报 ERROR 是纯噪声。
现场:编译 includes/traceback.vp 时,TracebackState.FrameAddr 的注解
`t.CArray[uint64, TRACEBACK_FRAME_BUF]`(traceback.vp:532)经规则 1.5 递归规范化
实参 'uint64' ⇒ 规则 5.5 取不到 SHA1 ⇒ 每次编译刷一条
"[类型实参归属] 裸类名 'uint64' 本次保留裸名…"。'uint64' 是 includes/builtins.vp 的
`typedef uint64 = t.CUInt64T`,不进类归属是预期行为,不是缺陷。
修法:新增 `_is_non_class_type_name(pool, name)`(正向白名单,不猜):
① CTypedef 动态表命中(Phase1 1b register_ctypedef_from_source 文本扫描注册);
② builtins 兜底 `_lookup_builtins_typedef`(与 resolve_typedef_or_map 同一口径:
builtins 始终在编译链内,但其 typedef 不随 from_imports 注入 ⇒ 表可能 miss;
命中即幂等注册进表);
③ 语言内置标量/字符串(int/char/bool/float/double/str/bytes/void,与
_resolve_annot_type_name 的跳过清单同口径);
④ 泛型形参名(单字母大写 T/U/V…,特化前出现在实参位属正常)。
门控只对「结构体表里根本没有该名」(_bare_entry is None)豁免:若它确是已注册的类
(.vpi 半条目)只是缺定义模块 SHA1,那是真正的归属缺口,照旧报出,不被同名 typedef 掩盖。
未验证:本改动需重新自举 TransPyV.exe 才生效(TPC 侧无对应逻辑)。vast 解析通过。
2026-09-30 13:51:22 +08:00
..
2026-09-30 13:51:22 +08:00
2026-09-28 18:43:59 +08:00
2026-09-23 16:09:32 +08:00
2026-09-29 22:29:48 +08:00
2026-09-23 16:09:32 +08:00