From c5424429877e8a775884812e62f6293e969ea8d7 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 27 Aug 2026 16:16:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(structgen):=20=E8=A3=B8=E5=90=8D=E5=9B=9E?= =?UTF-8?q?=E9=80=80=E5=AD=97=E6=AE=B5=E6=9C=AA=E6=89=BE=E5=88=B0=E6=97=B6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=20None=20=E8=80=8C=E9=9D=9E=20fatal=5Ferror?= =?UTF-8?q?=EF=BC=8C=E8=AE=A9=20REnum=20=E5=8F=98=E4=BD=93=E5=88=AB?= =?UTF-8?q?=E5=90=8D=E5=9B=9E=E9=80=80=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ce62546 新增的裸名回退分支在类命中但字段未找到时 fatal_error, 截断了 ExprGenAttr L853-864 的 REnum 变体别名回退(LLVMType.Pointee → _p2 槽位是变体别名非普通字段)→ AssignGenMixin.vp:1002 "类 llvmlite.LLVMType 裸名回退但字段 Pointee 未找到" - 改为字段未找到 return None,对齐主 SHA1 匹配分支语义,让调用方 有机会走 REnum 别名/继承链回退 --- App/lib/core/Gen/StructGenMixin.vp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/App/lib/core/Gen/StructGenMixin.vp b/App/lib/core/Gen/StructGenMixin.vp index 40b28da..08f104a 100644 --- a/App/lib/core/Gen/StructGenMixin.vp +++ b/App/lib/core/Gen/StructGenMixin.vp @@ -854,12 +854,11 @@ class StructGenMixin: if string.strcmp(fe_q2.Name, field_name) == 0: stdlib.free(mod_buf_q) return fe_q2 - # 裸名类命中但字段未找到:可读化报错 - viperlib.snprintf(fb, 1024, - "lookup_field_by_class: 类 '%s' 裸名回退" - "(ModuleSha1=%s, FieldCount=%d)但字段 '%s' 未找到", - class_name, mod_sha1_q, same_entry_q.FieldCount, field_name) - self.Gen.TypeGenErr.fatal_error(node, fb, "AttributeError") + # 裸名类命中但字段未找到:返回 None(不 fatal_error)—— + # 字段可能是 REnum 变体别名(如 LLVMType.Pointee → _p2 + # 槽位)或继承字段,调用方(ExprGenAttr L853-864)有 + # REnum 别名回退等后续机会;对齐主 SHA1 匹配分支 + # (L797-798 字段未找到 return None)的语义。 stdlib.free(mod_buf_q) return None # 裸名也不唯一/不存在:fail-fast(暴露 vpi 注入/注册缺陷,