From d0cf283228629bb1d8fea64c0f678266b524aa7f Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 17 Aug 2026 07:49:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20ClassGen=20=E6=8B=86=E5=88=86?= =?UTF-8?q?=E9=81=97=E6=BC=8F=E7=9A=84=2012=20=E4=B8=AA=E9=A1=B6=E5=B1=82?= =?UTF-8?q?=20CDefine=20=E5=B8=B8=E9=87=8F=E8=A1=A5=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- App/lib/core/Gen/ClassGenBase.vp | 23 +++++++++++++++++++++++ App/lib/core/Gen/ClassGenGeneric.vp | 9 +++++++++ App/lib/core/Gen/ClassGenVTable.vp | 4 ++++ 3 files changed, 36 insertions(+) diff --git a/App/lib/core/Gen/ClassGenBase.vp b/App/lib/core/Gen/ClassGenBase.vp index 94f9b12..8ab8507 100644 --- a/App/lib/core/Gen/ClassGenBase.vp +++ b/App/lib/core/Gen/ClassGenBase.vp @@ -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) diff --git a/App/lib/core/Gen/ClassGenGeneric.vp b/App/lib/core/Gen/ClassGenGeneric.vp index aab199a..b2e66fd 100644 --- a/App/lib/core/Gen/ClassGenGeneric.vp +++ b/App/lib/core/Gen/ClassGenGeneric.vp @@ -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):泛型模板注册/特化/克隆 # diff --git a/App/lib/core/Gen/ClassGenVTable.vp b/App/lib/core/Gen/ClassGenVTable.vp index 46a9f01..e8abe09 100644 --- a/App/lib/core/Gen/ClassGenVTable.vp +++ b/App/lib/core/Gen/ClassGenVTable.vp @@ -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 收集/生成/方法翻译 #