This fallback version of PyString_AS_STRING() for Python 3 makes use of PyUnicode_AS_STRING, but I can find no evidence that ever existed in Python - all references I've found are to SWIG or SWIG-generated code. The only uses of PyString_AS_STRING() in SWIG generated code are for Python 2 #if-branches, so this fallback is never used by SWIG. Because it doesn't work it can't be usefully used in user interface files either, so let's remove it to avoid potential user confusion (such as #987).
89 lines
2.5 KiB
Text
89 lines
2.5 KiB
Text
/* Compatibility macros for Python 3 */
|
|
#if PY_VERSION_HEX >= 0x03000000
|
|
|
|
#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type)
|
|
#define PyInt_Check(x) PyLong_Check(x)
|
|
#define PyInt_AsLong(x) PyLong_AsLong(x)
|
|
#define PyInt_FromLong(x) PyLong_FromLong(x)
|
|
#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
|
|
#define PyString_Check(name) PyBytes_Check(name)
|
|
#define PyString_FromString(x) PyUnicode_FromString(x)
|
|
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
|
|
#define PyString_AsString(str) PyBytes_AsString(str)
|
|
#define PyString_Size(str) PyBytes_Size(str)
|
|
#define PyString_InternFromString(key) PyUnicode_InternFromString(key)
|
|
#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE
|
|
#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x)
|
|
|
|
#endif
|
|
|
|
#ifndef Py_TYPE
|
|
# define Py_TYPE(op) ((op)->ob_type)
|
|
#endif
|
|
|
|
/* SWIG APIs for compatibility of both Python 2 & 3 */
|
|
|
|
#if PY_VERSION_HEX >= 0x03000000
|
|
# define SWIG_Python_str_FromFormat PyUnicode_FromFormat
|
|
#else
|
|
# define SWIG_Python_str_FromFormat PyString_FromFormat
|
|
#endif
|
|
|
|
|
|
/* Warning: This function will allocate a new string in Python 3,
|
|
* so please call SWIG_Python_str_DelForPy3(x) to free the space.
|
|
*/
|
|
SWIGINTERN char*
|
|
SWIG_Python_str_AsChar(PyObject *str)
|
|
{
|
|
#if PY_VERSION_HEX >= 0x03030000
|
|
return (char *)PyUnicode_AsUTF8(str);
|
|
#elif PY_VERSION_HEX >= 0x03000000
|
|
char *newstr = 0;
|
|
str = PyUnicode_AsUTF8String(str);
|
|
if (str) {
|
|
char *cstr;
|
|
Py_ssize_t len;
|
|
if (PyBytes_AsStringAndSize(str, &cstr, &len) != -1) {
|
|
newstr = (char *) malloc(len+1);
|
|
if (newstr)
|
|
memcpy(newstr, cstr, len+1);
|
|
}
|
|
Py_XDECREF(str);
|
|
}
|
|
return newstr;
|
|
#else
|
|
return PyString_AsString(str);
|
|
#endif
|
|
}
|
|
|
|
#if PY_VERSION_HEX >= 0x03030000 || PY_VERSION_HEX < 0x03000000
|
|
# define SWIG_Python_str_DelForPy3(x)
|
|
#else
|
|
# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) )
|
|
#endif
|
|
|
|
|
|
SWIGINTERN PyObject*
|
|
SWIG_Python_str_FromChar(const char *c)
|
|
{
|
|
#if PY_VERSION_HEX >= 0x03000000
|
|
return PyUnicode_FromString(c);
|
|
#else
|
|
return PyString_FromString(c);
|
|
#endif
|
|
}
|
|
|
|
#ifndef PyObject_DEL
|
|
# define PyObject_DEL PyObject_Del
|
|
#endif
|
|
|
|
/* SWIGPY_USE_CAPSULE is no longer used within SWIG itself, but some user interface files check for it. */
|
|
# define SWIGPY_USE_CAPSULE
|
|
# define SWIGPY_CAPSULE_NAME ("swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME)
|
|
|
|
#if PY_VERSION_HEX < 0x03020000
|
|
#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
|
|
#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
|
|
#define Py_hash_t long
|
|
#endif
|