TermiNexus
1cce6c4a47
fix(TypeGenResolve): 「保留裸名」误报的第二入口——逐实参归一时跳过定长数组的元素个数位 + CDefine 名不再算类名
类别:a(编译器缺陷)。`ef4421d` 只补了 `_norm_type_arg_name` 规则 1.5 的"跳过第 2 实参",
但那条规则**拿不到容器上下文**的入口不止一个,实测 still 报:
├ ERROR [TypeGen] [类型实参归属] 裸类名 'TRACEBACK_FRAME_BUF' 本次保留裸名 …
entry_present=0 entry.Ty=None cur_def_mod=ba7cdbd0dec2aef8 cur_def_cls=TracebackState
… file=./includes/traceback.vp
两处修(互为补充,判据都指向同一条事实:定长数组的第 2 实参是**常量**,不是类名):
1) `extract_class_name_from_annotation` 的 **Tuple 分支**(:2156/:2167,本函数自己按
`,` 把实参拆开逐个归一,规则 1.5 在这里根本不生效):
`TracebackState.FrameAddr: t.CArray[uint64, TRACEBACK_FRAME_BUF]`
⇒ 先按 `_is_count_arg_container(base_name)` 判容器是 t.CArray/list,是则第 2 实参
(`ti_sn == 1`)**原样保留、不调用归一**(长度计算与拼接两个循环同步改)。
2) `_is_non_class_type_name` 增 **⑤ CDefine 名**:`NAME: t.CDefine = 128` 是编译期常量,
名域就是它自身,永远不是类名 ⇒ 命中 `TypeGenCDef.lookup_cdefine_constant` +
`is_cdefine_found()`(-1 也是合法值,必须看标志)即豁免"保留裸名"取证。
这条判据落在**所有入口共用**的函数上,彻底覆盖其余"逐实参归一"的点
(如 CallGenCtor:768 的泛型实参提取)。
静态核验:同形语句片(`self.Gen.TypeGenCDef.lookup_cdefine_constant(...)` 丢弃返回值、
`elt_name: str = raw` 后条件重赋值、`range`/`len` 循环)过 `lib.vast` 解析。
生效需重新自举 TransPyV.exe。