TermiNexus
1c1f78e7b3
fix(tpc): 修正枚举判据——按 IsEnumMember 区分成员/类型(bb05a157 判反了)
a 编译器缺陷:bb05a157 用 `not Entry.IsEnum` 排除"枚举类型",但现场实测枚举
**成员**条目的标志组合是
IsEnum=True + IsEnumMember=True + BaseType=CEnum
(成员的 IsEnum 也被置真)⇒ 成员被误判成枚举类型,`rawptr[Constant]` 落 i32*,
`constant_get_str_val` 形参再次退化成 i32*。
正确判据(两处同源):
枚举**类型** = IsEnum and not IsEnumMember ⇒ 走枚举分支(宽度 i32 等)
枚举**成员**(IsEnumMember)⇒ 不是类型 ⇒ 让位给类定义("有类定义 ⇒ 是类")
现场证据(51de3b6d 的 [DIAG-decl] 报文,随 Traceback 输出):
实参类=5df907d3a02a0bac.Constant | structs=有 |
_struct_sha1_map=5df907d3a02a0bac | class_sha1_map=5df907d3a02a0bac |
symtab[IsStruct=False, IsEnum=True, IsEnumMember=True, Base=CEnum] |
声明函数类型=i8* (i32*) | 声明来源=..._EmitExternalFuncDeclLlvm <- _get_or_declare_function
修后 `ResolveAnnotationType(rawptr[Constant])` 得 CStruct/1 ⇒ _ctype_to_llvm 取
structs['Constant'] ⇒ 声明变为 i8* (%"5df907d3a02a0bac.Constant"*),与实参同型。
2026-09-28 22:44:20 +08:00
..
2026-08-21 12:36:00 +08:00
2026-09-28 16:48:52 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 16:48:52 +08:00
2026-09-26 19:27:22 +08:00
2026-09-27 00:19:44 +08:00
2026-09-28 22:20:09 +08:00
2026-09-26 19:27:22 +08:00
2026-09-26 21:25:52 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 15:10:39 +08:00
2026-09-26 19:27:22 +08:00
2026-09-27 16:02:40 +08:00
2026-09-28 15:53:02 +08:00
2026-09-28 16:52:03 +08:00
2026-09-11 22:47:21 +08:00
2026-09-28 15:10:39 +08:00
2026-09-27 15:16:08 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 13:57:04 +08:00
2026-09-28 16:52:03 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 21:46:30 +08:00
2026-08-17 09:36:38 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 15:10:39 +08:00
2026-09-26 19:27:22 +08:00
2026-08-17 09:36:38 +08:00
2026-09-28 22:44:20 +08:00
2026-08-03 02:00:49 +08:00
2026-09-26 19:27:22 +08:00