Files
TransPyC/lib
TermiNexus 8263f6ec47 fix(tpc): 形参注解解析落到 i32 时 fail-fast(下标/联合形态不可能是 i32)
a 编译器缺陷(无兜底铁律)。根因链:stub 与 .vpi 两侧都写着
`type_args: list[str] | t.CPtr`(等价 `list[str]*`),**都对**;错在消费侧:
`LLVMTypeMapper._resolve_subscript` 对**单参泛型下标**(`list[str]`,非 `list[T, N]`
定长数组)没有分支,落到末尾 `回退到 i32` 的兜底 —— 该串经
SymbolTypeResolver → SymbolTable._InsertFuncSymbol 原样存进 `FuncPtrParams`,
再由 BuildLLVMFuncTypeFromSig 物化成**形参 i32**,于是调用点报
「实参 %"650c1c3366d09e39.list[str]"* 不能隐式转为整数参数 i32」,把真因
(注解没解析出来)掩盖成"调用点类型不匹配"。

改法:`get_func_param_type_str` 末尾加守卫 —— 注解是 Subscript / 联合(BinOp|)而
解析结果恰为 `'i32'` 时 fail-fast,并带上注解原文(由 SymbolTypeResolver 再补函数名/
形参序号与名字)。理由:下标形态的合法结果是容器/泛型/定长数组(指针、数组或结构体
指针),联合形态是 `T | t.CPtr` 的指针叠加 —— 都不会是 i32;只有"解析失败"才会是。

现场:CallGenMixin.vp:149 → `_specialize_generic_class(trans, gen_class_name, gen_type_args)`
      callee=2292045c9694100e.ClassGenGeneric._specialize_generic_class
      逐项 [3] arg=%"650c1c3366d09e39.list[str]"* param=i32
2026-09-29 12:09:12 +08:00
..