fix(Translator): 类体 CDefine 预扫描扩展 + CDefine 类型修复(i32)

- GenerateLlvmDirect 预扫描扩展到类体 AnnAssign,注册类体 CDefine 常量
  (方法内裸名如 ISINSTANCE_CLASS_MAX 不再解析为 0)
- t.py CDefine Size/IsSigned 覆盖为 32 位有符号,修复 stub 生成 void 类型
- 新增 Test/TpvIsinstanceTest(TPV 侧 isinstance 回归测试)
This commit is contained in:
TermiNexus committed 2026-08-10 21:15:42 +08:00
1 parent 1b89225130
commit 9c2dc45c03
4 files changed
+197 -19

No files matched your search

+10
View File
@@ -579,9 +579,19 @@ class CArray(CType):
return cls
class CDefine(CType):
"""编译期常量定义标记(X: t.CDefine = 64)。
Size/IsSigned 覆盖为 32 位有符号整数(2026-08-10 修复):基类 __init__
将 Size/IsSigned 置 None,导致 CTypeToLLVM(CDefine) 推导为 'void',
类字段注解 t.CDefine(如 Mixin 的常量声明)在 stub 生成时变成 void,
LLVM struct 含 void 报 "void type only allowed for function results"。
语义上 CDefine 常量即为 int;超大值由 TypeConvert 按 DefineValue 升 i64。
"""
position: ClassVar[frozenset[str]] = frozenset({CType.BASE})
def __init__(self, value: Any = None) -> None:
super().__init__(value)
self.Size = 32
self.IsSigned = True
class CPass(CType):
position: ClassVar[frozenset[str]] = frozenset({CType.BASE})