fix(symbol): 补齐泛型实参原始名与浮点串集合

定义 _GENERIC_ARG_RAW_NAMES 与 _LLVM_FLOAT_STRINGS,修复 GenericArgRawName / MangleTypeArgByRegistry 的 NameError。
This commit is contained in:
TermiNexus committed 2026-10-18 15:08:26 +08:00
1 parent e47b5e4a11
commit 3081d71570
1 file changed
+11 -1
+11 -1
View File
@@ -2736,6 +2736,16 @@ def NormalizeGenericArgName(NameId: str) -> str:
return NameId
_LLVM_FLOAT_STRINGS: frozenset[str] = frozenset({'half', 'float', 'double', 'fp128'})
_GENERIC_ARG_RAW_NAMES: dict[str, str] = {
'int': 'CInt', 'char': 'CChar', 'bool': 'CBool',
'float': 'CFloat', 'double': 'CDouble', 'void': 'CVoid',
}
for _generic_short_name, _generic_class in TypeSystem.BUILTIN_TYPE_ALIASES.items():
_GENERIC_ARG_RAW_NAMES.setdefault(_generic_short_name, _generic_class.__name__)
def GenericArgRawName(NameId: str) -> str:
"""ast.Name 泛型实参 → 替换模板 T 用的原始类型名(_resolve_generic_slice_type
的第二返回值):'int' → 'CInt'(内建类型须用源码名替换 T,见
@@ -2749,7 +2759,7 @@ def MangleTypeArgByRegistry(ArgStr: str) -> str:
"""实参串 → 最终 mangled 实参(HandlesClassDef._mangle_generic_class_name
的单项逻辑,逐分支同构):t 类型名经 NameToLLVM 归一(CInt32T → 'i32',
'CInt'/'CInt' 先去模块前缀再归一),浮点按 Size 归一为 f{n}
(CDouble → 'f8'),未注册名原样保留(含指针层数与已解析的内层名)。
(CDouble → 'f64'),未注册名原样保留(含指针层数与已解析的内层名)。
"""
LookupStr: str = ArgStr
LlvmStr: str | None = CTypeRegistry.NameToLLVM(LookupStr)