Message61231
PEP353 recommends to add the following code snippet to extension
modules to ensure compatibility with pre-2.5 interpreters:
#if PY_VERSION_HEX < 0x02050000
typedef int Py_ssize_t;
#define PY_SSIZE_T_MAX INT_MAX
#define PY_SSIZE_T_MIN INT_MIN
#endif
This is insufficient, because type definitions that use Py_ssize_t must
also be added. Here is what works for me, though they may be more
definitions to be included:
#if PY_VERSION_HEX < 0x02050000
typedef int Py_ssize_t;
#define PY_SSIZE_T_MAX INT_MAX
#define PY_SSIZE_T_MIN INT_MIN
typedef Py_ssize_t (*lenfunc)(PyObject *);
typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t,
Py_ssize_t);
typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t,
PyObject *);
typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **);
#endif
However, the main problem is elsewhere. Extension modules may well
need to use Py_ssize_t in their own data types, and may furthermore
with to make these data types available to yet other extension
modules. In practice, this requires the inclusion of a code block such
as the one shown above inside header files. However, this requires a
mechanism for avoiding redefinitions, which at the moment does not
seem to exist. My request is to add such a mechanism to Python 2.5
and recommend its consistent use in an update of PEP353.
Concretely, I propose that Python 2.5 should define a macro
PY_HAS_PY_SSIZE_T, and that PEP353 should recommend the inclusion
of the code snippet
#ifndef PY_HAS_PY_SSIZE_T
#define PY_HAS_PY_SSIZE_T
typedef int Py_ssize_t;
/* add all the other definitions here */
#endif
that contains an exhaustive set of definitions that depend on
Py_ssize_t.
|
|
Date |
User |
Action |
Args |
2008-01-20 09:59:46 | admin | link | issue1485576 messages |
2008-01-20 09:59:46 | admin | create | |
|