From 426bff7daa11affc6c658aa46f872fd461b20962 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 21 Aug 2026 06:58:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20=E8=A1=A5=E5=9B=9E=E6=8B=86?= =?UTF-8?q?=E5=88=86=E6=97=B6=E4=B8=A2=E5=A4=B1=E7=9A=84=206=20=E4=B8=AA?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=EF=BC=88=E6=9E=9A=E4=B8=BE/=E6=B3=9B?= =?UTF-8?q?=E5=9E=8B/vtable/=E5=85=83=E6=95=B0=E6=8D=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ENUM_MEMBER_MAX_LOCAL/RENUM_CLASS_MAX/RENUM_VARIANT_PER_CLASS/RENUM_ALIAS_MAX 补回 ClassGenEnum (未定义名在常量上下文折叠为 0 → 枚举成员收集被静默禁用 → register_enum 永不调用 → EnumTable 恒空 → `OpKind.Add` 裸名 NameError,includes/ast/base.vp L241 根因) - SPEC_CACHE_MAX 补回 ClassGenGeneric(原 HandlesClassDef 定义) - VTBL_METHOD_MAX 补回 ClassGenVTable - META_MAX/META_KEY_LEN 补回 ClassGenBase --- App/lib/core/Gen/ClassGenBase.vp | 3 +++ App/lib/core/Gen/ClassGenEnum.vp | 12 ++++++++++++ App/lib/core/Gen/ClassGenGeneric.vp | 2 ++ App/lib/core/Gen/ClassGenVTable.vp | 2 ++ 4 files changed, 19 insertions(+) diff --git a/App/lib/core/Gen/ClassGenBase.vp b/App/lib/core/Gen/ClassGenBase.vp index 78599bf..c1b524e 100644 --- a/App/lib/core/Gen/ClassGenBase.vp +++ b/App/lib/core/Gen/ClassGenBase.vp @@ -37,6 +37,9 @@ 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 +# 方法元数据表容量(原 HandlesClassDef.META_MAX/META_KEY_LEN,阶段 D 拆分遗漏) +META_MAX: t.CDefine = 512 +META_KEY_LEN: t.CDefine = 128 # ============================================================ diff --git a/App/lib/core/Gen/ClassGenEnum.vp b/App/lib/core/Gen/ClassGenEnum.vp index 2877a70..5cf28a5 100644 --- a/App/lib/core/Gen/ClassGenEnum.vp +++ b/App/lib/core/Gen/ClassGenEnum.vp @@ -16,6 +16,18 @@ import lib.core.CompilerFactory as CompilerFactory import lib.core.Gen.ClassGenBase as ClassGenBase + +# ============================================================ +# 本地常量副本(原 HandlesEnum.vp / HandlesClassDef.vp 定义,去除 Handles +# 层拆分时随文件删除而丢失——未定义名在常量上下文被 TPV 折叠为 0,曾导致 +# 枚举成员收集被静默跳过、register_enum 永不调用 → 所有 CEnum 注册失败 → +# `OpKind.Add` 裸名 NameError(includes/ast/base.vp L241 根因)) +# ============================================================ +ENUM_MEMBER_MAX_LOCAL: t.CDefine = 128 # 与 StmtGenDeclMixin.ENUM_MEMBER_MAX 一致 +RENUM_CLASS_MAX: t.CDefine = 64 +RENUM_VARIANT_PER_CLASS: t.CDefine = 32 +RENUM_ALIAS_MAX: t.CDefine = 512 + # ============================================================ # ClassGenEnum - ClassGenMixin 拆分(阶段 D):enum/union/renum 定义与变体表 # diff --git a/App/lib/core/Gen/ClassGenGeneric.vp b/App/lib/core/Gen/ClassGenGeneric.vp index 3210b68..1a27410 100644 --- a/App/lib/core/Gen/ClassGenGeneric.vp +++ b/App/lib/core/Gen/ClassGenGeneric.vp @@ -25,6 +25,8 @@ GENERIC_SPEC_MAX_DEPTH: t.CDefine = 64 # 泛型模板表容量上限(与 GenericClassNames 等 pool 表可容纳的模板数对齐; # 原 ClassGenMixin 顶层常量,阶段 D 拆分时遗漏,补回) GENERIC_TEMPLATE_MAX: t.CDefine = 512 +# 泛型特化缓存表容量(原 HandlesClassDef.SPEC_CACHE_MAX,阶段 D 拆分遗漏) +SPEC_CACHE_MAX: t.CDefine = 512 # ============================================================ # ClassGenGeneric - ClassGenMixin 拆分(阶段 D):泛型模板注册/特化/克隆 diff --git a/App/lib/core/Gen/ClassGenVTable.vp b/App/lib/core/Gen/ClassGenVTable.vp index 21f769c..c3f3150 100644 --- a/App/lib/core/Gen/ClassGenVTable.vp +++ b/App/lib/core/Gen/ClassGenVTable.vp @@ -20,6 +20,8 @@ import lib.core.Handles.ExprCallTable as ExprCallTable # 方法元数据 flag:TLS(@t.TLS 装饰器,对齐 ClassGenBase 本地常量;本地副本避免跨模块 CDefine 查找) META_TLS: t.CDefine = 32 +# 虚表方法数上限(原 HandlesClassDef.VTBL_METHOD_MAX,阶段 D 拆分遗漏) +VTBL_METHOD_MAX: t.CDefine = 32 # ============================================================ # ClassGenVTable - ClassGenMixin 拆分(阶段 D):vtable 收集/生成/方法翻译