fix(gen): ClassGen 拆分遗漏的 12 个顶层 CDefine 常量补回

GSListNode 泛型特化报'深度=1'递归过深根因:GENERIC_SPEC_MAX_DEPTH
在阶段 D 拆分时从 ClassGenMixin 顶层遗漏,TPC 解析为 0 → 任何特化
立即触发守卫。对比拆分前后顶层 CDefine 全量比对,补回遗漏 12 个:
- ClassGenGeneric: GENERIC_SPEC_MAX_DEPTH=64 / GENERIC_TEMPLATE_MAX=512
- ClassGenBase: META_TLS / CLASS_META_MAX / DECOR_FUNC_MAX / DECOR_NAME_LEN
  / EXCEPTION_MAX / EXCEPTION_NAME_LEN / BUILTIN_EH_* / EH_USER_CODE_START
- ClassGenVTable: META_TLS(本地副本)
全部本地副本模式,避免跨模块 CDefine 查找 bug
This commit is contained in:
TermiNexus committed 2026-08-17 07:49:27 +08:00
1 parent ebfc74063f
commit d0cf283228
3 files changed
+36

No files matched your search

+23
View File
@@ -20,6 +20,29 @@ import lib.core.StubMerger as StubMerger
import lib.core.CompilerFactory as CompilerFactory
# ============================================================
# 本地常量(阶段 D 拆分时从 ClassGenMixin 顶层遗漏,补回:
# 方法元数据/类元数据/装饰器/异常表容量与编码;本地副本避免跨模块 CDefine 查找)
# ============================================================
# 方法元数据 flag 位(对齐 TPC HandlesBase _METHOD_META_*)
META_TLS: t.CDefine = 32
# 类编译期元数据表容量上限(__provides__/__requires__/__require_must__)
CLASS_META_MAX: t.CDefine = 256
# 自定义装饰器 wrapper 表容量上限(带 @decor 的函数数)
DECOR_FUNC_MAX: t.CDefine = 64
# 装饰器表槽内函数名/wrapper 名长度(含 NUL)
DECOR_NAME_LEN: t.CDefine = 128
# 异常类注册表容量上限(class X(Exception) 自定义异常类)
EXCEPTION_MAX: t.CDefine = 64
# 异常类表槽内类名/父类名长度(含 NUL)
EXCEPTION_NAME_LEN: t.CDefine = 128
# 内置异常编码(对齐 TPC HandlesBase.py EXCEPTION_CODE_MAP);
# KeyError=6 IOError=7 OSError=8 AssertionError=9 Exception=99;用户类从 100 起
BUILTIN_EH_VALUE_ERROR: t.CDefine = 1
BUILTIN_EH_RUNTIME_ERROR: t.CDefine = 3
BUILTIN_EH_EXCEPTION: t.CDefine = 99
EH_USER_CODE_START: t.CDefine = 100
# ============================================================
# ClassGenBase - ClassGenMixin 拆分(阶段 D):字段 + 方法元数据/异常/继承检测/装饰器(Meta)
+9
View File
@@ -22,6 +22,15 @@ import lib.core.CompilerFactory as CompilerFactory
import lib.core.Gen.ClassGenBase as ClassGenBase
# 泛型特化递归深度上限(泛型循环套用防护)
# 正常嵌套特化深度 ≤ 3(如 list[list[str]]);64 远超合理值,命中即循环。
# (原 HandlesClassDef/ClassGenMixin 顶层常量,阶段 D 拆分时遗漏,补回)
GENERIC_SPEC_MAX_DEPTH: t.CDefine = 64
# 泛型模板表容量上限(与 GenericClassNames 等 pool 表可容纳的模板数对齐;
# 原 ClassGenMixin 顶层常量,阶段 D 拆分时遗漏,补回)
GENERIC_TEMPLATE_MAX: t.CDefine = 512
# ============================================================
# ClassGenGeneric - ClassGenMixin 拆分(阶段 D):泛型模板注册/特化/克隆
#
+4
View File
@@ -22,6 +22,10 @@ import lib.core.CompilerFactory as CompilerFactory
import lib.core.Gen.ClassGenBase as ClassGenBase
# 方法元数据 flag:TLS(@t.TLS 装饰器,对齐 ClassGenBase 本地常量;本地副本避免跨模块 CDefine 查找)
META_TLS: t.CDefine = 32
# ============================================================
# ClassGenVTable - ClassGenMixin 拆分(阶段 D):vtable 收集/生成/方法翻译
#