TermiNexus
c3f554f1f5
feat(struct): 嵌套 class/struct 发射为独立结构体 {外类}_{内类}
用户 2026-10-01 定:struct 内允许叠加 struct(与 class 内写 class 同口径)。
此前类体里的嵌套 ClassDef 被**静默丢弃**(字段循环只认 AnnAssign、
_translate_oop_methods 只认 FunctionDef),现按 TPC 侧 union/renum 的
`{ClassName}_{Nested}` 命名先例发射为独立结构体,与 TPC 提交 5eef845e 同源。
- ClassGenDef.vp:新增 _translate_nested_classdefs —— 在 enum/union/renum/泛型/
异常分派之后、existing 检查之前(所有提前 return 之前,故 declare_only=1/0 都递归)
遍历类体 ClassDef 子节点,把子节点 name 临时改写为扁平名后递归
translate_class_def(本模块所有名字派生点都读 cd.name ⇒ 改名即全链路一致)。
两个护栏:扁平名分配在 PermPool(跨 Phase 存活);递归后还原 CurDefModuleSha1/
CurDefClassName(内层 mark_module_class 会覆盖,否则外层字段解析误判当前定义类)。
- TypeGenResolve.vp:新增 _resolve_nested_class_type 并在 Attribute 分支的
"base 不是模块" 出口前接上 —— 限定名 `外类.内类` 按扁平名查结构体表即可命中
(裸名 `外类_内类` 走既有 Name 分支天然命中)。判据两道:base 是已知类
(find_struct 命中,或正处于该类的定义窗口内);扁平名条目存在且 Ty 非空。
引用两种写法都可用:`外类.内类`、`外类_内类`;多层嵌套递归为 A_B_C。
2026-10-01 23:30:15 +08:00
..
2026-10-01 20:29:15 +08:00
2026-10-01 23:30:15 +08:00
2026-10-01 21:44:55 +08:00
2026-10-01 21:43:11 +08:00
2026-09-28 21:48:53 +08:00
2026-10-01 23:30:15 +08:00
2026-08-28 04:50:09 +08:00
2026-10-01 21:39:48 +08:00
2026-09-29 15:10:33 +08:00
2026-09-23 16:09:32 +08:00
2026-09-29 15:10:33 +08:00
2026-10-01 14:46:47 +08:00
2026-09-30 19:09:22 +08:00
2026-09-23 16:09:32 +08:00
2026-09-28 18:43:59 +08:00
2026-09-28 21:48:53 +08:00
2026-10-01 14:46:47 +08:00
2026-10-01 14:46:47 +08:00
2026-09-29 15:10:33 +08:00
2026-09-29 15:10:33 +08:00