From 4f59396d5cae9642919f6358a08ec1ed561e17e6 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 11 Aug 2026 18:42:34 +0800 Subject: [PATCH] =?UTF-8?q?test(CPythonTest):=20PyLong=5FFromLong/AsLong?= =?UTF-8?q?=20=E6=8C=89=20Windows=20LLP64=20long=3D32=20=E4=BD=8D=E6=94=B9?= =?UTF-8?q?=E7=94=A8=20t.CInt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TPV 恒映射 t.CLong=i64,而 Windows x64 下 C long 为 32 位:PyLong_AsLong 实际返回 EAX 32 位,按 i64 读负数被零扩展(-999 → 4294966297)导致 比较 FAIL;改用 t.CInt(i32)与 ABI 一致,负数由赋值处 sext 正确扩展 --- Test/CPythonTest/App/cpython.vp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/CPythonTest/App/cpython.vp b/Test/CPythonTest/App/cpython.vp index f9fb785..37aa063 100644 --- a/Test/CPythonTest/App/cpython.vp +++ b/Test/CPythonTest/App/cpython.vp @@ -110,14 +110,14 @@ def PyStatus_Exception(status: PySTATUS) -> t.CInt | t.State: pass # ============================================================ # 整数操作 (PyLong) # ============================================================ -def PyLong_FromLong(v: t.CLong) -> PyObject | t.CPtr | t.State: pass +def PyLong_FromLong(v: t.CInt) -> PyObject | t.CPtr | t.State: pass def PyLong_FromUnsignedLong(v: t.CUnsignedLong) -> PyObject | t.CPtr | t.State: pass def PyLong_FromLongLong(v: t.CLong) -> PyObject | t.CPtr | t.State: pass def PyLong_FromUnsignedLongLong(v: t.CUnsignedLong) -> PyObject | t.CPtr | t.State: pass def PyLong_FromSsize_t(v: t.CPtrDiffT) -> PyObject | t.CPtr | t.State: pass def PyLong_FromSize_t(v: t.CSizeT) -> PyObject | t.CPtr | t.State: pass def PyLong_FromDouble(v: t.CDouble) -> PyObject | t.CPtr | t.State: pass -def PyLong_AsLong(obj: PyObject | t.CPtr) -> t.CLong | t.State: pass +def PyLong_AsLong(obj: PyObject | t.CPtr) -> t.CInt | t.State: pass def PyLong_AsUnsignedLong(obj: PyObject | t.CPtr) -> t.CUnsignedLong | t.State: pass def PyLong_AsLongLong(obj: PyObject | t.CPtr) -> t.CLong | t.State: pass def PyLong_AsUnsignedLongLong(obj: PyObject | t.CPtr) -> t.CUnsignedLong | t.State: pass