fix(expr): list 元素类型未知恢复 i8* 回退

list[Foo]/list[AST|t.CPtr] 等自定义类元素列表下标访问:元素存储为 8 字节槽,回退 Ptr(i8) 位宽一致(load 8 字节)且由 AnnotClassName/特化恢复保证语义。fail-fast 误杀合法自定义类元素列表,恢复回退。
This commit is contained in:
TermiNexus committed 2026-08-13 02:33:53 +08:00
1 parent 1b80283634
commit e796e7fc2b
1 file changed
+5 -7
+5 -7
View File
@@ -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__ 逻辑