feat(generic): 泛型函数类型实参推断与单态化

支持 def f[T](x: T) -> T 及 f(x)/f[T](x):模板注册(Phase1Scan/Phase2 顶层 FunctionDef,键 {sha1}.{name})、按形参注解对齐从实参推断类型实参(无来源即 fail-fast,不静默默认 int)、克隆模板并 set_generic_context 后翻译生成特化体(名字 {sha1}.f[int],规范化复用 _mangle_generic_class_name)、同签名去重、跨模块按模板签名补 declare。泛型函数模板不再发 vpi(模板签名含未绑定 T),也不再发射 int 兜底版本。已知限制(未静默):bound [T: bound] 解析期已被丢弃;t.CExport/t.CExtern/t.State 泛型函数、关键字/默认参数调用、mod.f[T](x) 显式下标等暂 fail-fast 或走既有报错。
This commit is contained in:
TermiNexus committed 2026-10-03 11:59:26 +08:00
1 parent 1fbebb2a62
commit 692998820c
10 files changed
+886 -57

No files matched your search

+7
View File
@@ -531,6 +531,13 @@ def _register_generic_template(pool: memhub.MemBuddy*, cd: ast.ClassDef*, module
_g_gen.ClassGenGeneric._register_generic_template(pool, cd, module_sha1)
# ---------------- _register_generic_func_template(委托 ClassGenGeneric._register_generic_func_template) ----------------
def _register_generic_func_template(pool: memhub.MemBuddy*, fd: ast.FunctionDef*, module_sha1: str):
"""委托到 gen.ClassGenGeneric._register_generic_func_template(扫描预注册用)"""
if _g_gen is not None:
_g_gen.ClassGenGeneric._register_generic_func_template(pool, fd, module_sha1)
# ---------------- _mangle_name_with_sha1(委托 FuncGenBase._mangle_name_with_sha1) ----------------
def _mangle_name_with_sha1(sha1: str, name: str) -> str:
"""委托到 gen._mangle_name_with_sha1(原 Handles 壳)"""