From e796e7fc2bc26398142df437b900984eaebf8831 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 13 Aug 2026 02:33:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(expr):=20list=20=E5=85=83=E7=B4=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=9C=AA=E7=9F=A5=E6=81=A2=E5=A4=8D=20i8*=20=E5=9B=9E?= =?UTF-8?q?=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit list[Foo]/list[AST|t.CPtr] 等自定义类元素列表下标访问:元素存储为 8 字节槽,回退 Ptr(i8) 位宽一致(load 8 字节)且由 AnnotClassName/特化恢复保证语义。fail-fast 误杀合法自定义类元素列表,恢复回退。 --- App/lib/core/Gen/ExprGenMixin.vp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/App/lib/core/Gen/ExprGenMixin.vp b/App/lib/core/Gen/ExprGenMixin.vp index d48be59..b83b612 100644 --- a/App/lib/core/Gen/ExprGenMixin.vp +++ b/App/lib/core/Gen/ExprGenMixin.vp @@ -3122,13 +3122,11 @@ class ExprGenMixin: return llvmlite.Ptr(pool, i8_ty_d) if string.strstr(struct_name, "list[CPtr]") is not None: return llvmlite.Ptr(pool, i8_ty_d) - # fail-fast:未知 list[T] 元素类型无法映射 LLVM 类型,立即终止编译 - # (不再静默回退 Ptr(i8),暴露上游元素类型缺失根因) - HandlesType.fatal_error( - None, - f"list 元素类型未知:'{struct_name}' 无法映射 LLVM 类型", - "TypeError") - return None + # 未知 list[T] 元素类型(如 list[Foo]、list[AST|t.CPtr]):元素存储为 + # 8 字节槽(指针或 8 字节整数),回退 Ptr(i8) 位宽一致(load 8 字节), + # 由 AnnotClassName/特化恢复机制保证语义。禁止 fail-fast(误杀合法 + # 自定义类元素列表的下标访问)。 + return llvmlite.Ptr(pool, i8_ty_d) # ============================================================ # list_setitem_inline — 内联生成 list[T] __setitem__ 逻辑