diff --git a/lib/core/SymbolUtils.py b/lib/core/SymbolUtils.py index 7357880..9f27b36 100644 --- a/lib/core/SymbolUtils.py +++ b/lib/core/SymbolUtils.py @@ -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)