[pypy-commit] pypy default: cpyext: support T_PYSSIZET struct members

amauryfa noreply at buildbot.pypy.org
Wed May 2 01:02:03 CEST 2012


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: 
Changeset: r54847:7fd659f71123
Date: 2012-04-30 23:51 +0200
http://bitbucket.org/pypy/pypy/changeset/7fd659f71123/

Log:	cpyext: support T_PYSSIZET struct members

diff --git a/pypy/module/cpyext/include/structmember.h b/pypy/module/cpyext/include/structmember.h
--- a/pypy/module/cpyext/include/structmember.h
+++ b/pypy/module/cpyext/include/structmember.h
@@ -40,7 +40,8 @@
 				   when the value is NULL, instead of
 				   converting to None. */
 #define T_LONGLONG	17
-#define T_ULONGLONG	 18
+#define T_ULONGLONG	18
+#define T_PYSSIZET	19
 
 /* Flags. These constants are also in structmemberdefs.py. */
 #define READONLY      1
diff --git a/pypy/module/cpyext/structmember.py b/pypy/module/cpyext/structmember.py
--- a/pypy/module/cpyext/structmember.py
+++ b/pypy/module/cpyext/structmember.py
@@ -10,7 +10,7 @@
     PyString_FromString, PyString_FromStringAndSize)
 from pypy.module.cpyext.floatobject import PyFloat_AsDouble
 from pypy.module.cpyext.longobject import (
-    PyLong_AsLongLong, PyLong_AsUnsignedLongLong)
+    PyLong_AsLongLong, PyLong_AsUnsignedLongLong, PyLong_AsSsize_t)
 from pypy.module.cpyext.typeobjectdefs import PyMemberDef
 from pypy.rlib.unroll import unrolling_iterable
 
@@ -28,6 +28,7 @@
     (T_DOUBLE, rffi.DOUBLE, PyFloat_AsDouble),
     (T_LONGLONG,  rffi.LONGLONG,  PyLong_AsLongLong),
     (T_ULONGLONG, rffi.ULONGLONG, PyLong_AsUnsignedLongLong),
+    (T_PYSSIZET, rffi.SSIZE_T, PyLong_AsSsize_t),
     ])
 
 
diff --git a/pypy/module/cpyext/structmemberdefs.py b/pypy/module/cpyext/structmemberdefs.py
--- a/pypy/module/cpyext/structmemberdefs.py
+++ b/pypy/module/cpyext/structmemberdefs.py
@@ -18,6 +18,7 @@
 T_OBJECT_EX = 16
 T_LONGLONG = 17
 T_ULONGLONG = 18
+T_PYSSIZET = 19
 
 READONLY = RO = 1
 READ_RESTRICTED = 2
diff --git a/pypy/module/cpyext/test/foo.c b/pypy/module/cpyext/test/foo.c
--- a/pypy/module/cpyext/test/foo.c
+++ b/pypy/module/cpyext/test/foo.c
@@ -19,6 +19,7 @@
     double foo_double;
     long long foo_longlong;
     unsigned long long foo_ulonglong;
+    Py_ssize_t foo_ssizet;
 } fooobject;
 
 static PyTypeObject footype;
@@ -172,7 +173,8 @@
     {"float_member", T_FLOAT, offsetof(fooobject, foo_float), 0, NULL},
     {"double_member", T_DOUBLE, offsetof(fooobject, foo_double), 0, NULL},
     {"longlong_member", T_LONGLONG, offsetof(fooobject, foo_longlong), 0, NULL},
-    {"ulonglong_member", T_ULONGLONG, offsetof(fooobject, foo_ulonglong), 0, NULL},
+    {"ulonglong_member", T_ULONGLONG, offsetof(fooobject, foo_ulonglong), 0, NULL},  
+    {"ssizet_member", T_PYSSIZET, offsetof(fooobject, foo_ssizet), 0, NULL},
     {NULL}  /* Sentinel */
 };
 
diff --git a/pypy/module/cpyext/test/test_typeobject.py b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -107,6 +107,7 @@
         obj.double_member = 9.25;      assert obj.double_member == 9.25
         obj.longlong_member = -2**59;  assert obj.longlong_member == -2**59
         obj.ulonglong_member = 2**63;  assert obj.ulonglong_member == 2**63
+        obj.ssizet_member = 2**31;     assert obj.ssizet_member == 2**31
         #
 
     def test_staticmethod(self):


More information about the pypy-commit mailing list