From 3081d7157074a11cb5408a9ecfedb6331e21a557 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 18 Oct 2026 15:08:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(symbol):=20=E8=A1=A5=E9=BD=90=E6=B3=9B?= =?UTF-8?q?=E5=9E=8B=E5=AE=9E=E5=8F=82=E5=8E=9F=E5=A7=8B=E5=90=8D=E4=B8=8E?= =?UTF-8?q?=E6=B5=AE=E7=82=B9=E4=B8=B2=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 定义 _GENERIC_ARG_RAW_NAMES 与 _LLVM_FLOAT_STRINGS,修复 GenericArgRawName / MangleTypeArgByRegistry 的 NameError。 --- lib/core/SymbolUtils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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)