diff --git a/App/lib/core/Handles/HandlesExprCall.vp b/App/lib/core/Handles/HandlesExprCall.vp index 2aacae2..6b4d685 100644 --- a/App/lib/core/Handles/HandlesExprCall.vp +++ b/App/lib/core/Handles/HandlesExprCall.vp @@ -4958,20 +4958,16 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr, sz_val: int = HandlesClassDef._get_type_size(sz_struct_ty) if sz_val > 0: return llvmlite.const_int64(pool, sz_val) - # 类型已注册但大小为 0(opaque struct 或字段链表未填充):报错终止 - fb_sz1: t.CChar | t.CPtr = VLogger.fmt_buf() - if fb_sz1 is not None: - viperlib.snprintf(fb_sz1, 1024, - "类型 '%s' 已注册但大小为 0(字段链表未填充),立即终止编译", - sz_cls_name) - VLogger.critical(fb_sz1, "__sizeof__") - # 类型未注册:报错终止,不静默返回 0(会导致 malloc(0)/alloc(0) 堆溢出) - fb_sz2: t.CChar | t.CPtr = VLogger.fmt_buf() - if fb_sz2 is not None: - viperlib.snprintf(fb_sz2, 1024, - "类型 '%s' 未在结构体表中注册,无法计算大小,立即终止编译", - sz_cls_name) - VLogger.critical(fb_sz2, "__sizeof__") + # 类型已注册但大小为 0(opaque struct 或字段链表未填充):Python 风格报错终止 + HandlesType.fatal_error( + sz_at, f"类型 '{sz_cls_name}' 已注册但大小为 0(字段链表未填充),无法计算大小", + "TypeError") + # 类型未注册:Python 风格报错终止,不静默返回 0(会导致 malloc(0)/alloc(0) 堆溢出)。 + # 注意:__sizeof__ 的接收者若是变量名(如 self.__sizeof__()),sz_cls_name 是 + # 字面变量名("self")而非类型名,此报错即由此类误用触发(见 G5/GenericTest2)。 + HandlesType.fatal_error( + sz_at, f"类型 '{sz_cls_name}' 未在结构体表中注册,无法计算大小", + "TypeError") # 检测 obj.__len__() — 返回 list 对象的 __count__ 字段(偏移 8,i64) # __len__ 是 list[T] 的内置方法,list 是泛型类不注册 struct