21 #ifdef _POSIX_C_SOURCE 22 # undef _POSIX_C_SOURCE 30 #define PY_SSIZE_T_CLEAN 1 34 #ifndef LINK_ALL_STATIC 35 # define EXPCL_PYPANDA 36 #elif defined(__GNUC__) 37 # define EXPCL_PYPANDA __attribute__((weak)) 39 # define EXPCL_PYPANDA extern inline 45 #ifndef Py_RETURN_NONE 46 # define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None 49 #ifndef Py_RETURN_TRUE 50 # define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True 53 #ifndef Py_RETURN_FALSE 54 # define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False 60 #if PY_VERSION_HEX < 0x02050000 61 typedef int Py_ssize_t;
62 # define PyInt_FromSsize_t PyInt_FromLong 63 # define PyInt_AsSsize_t PyInt_AsLong 69 # define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) 74 #ifndef PyVarObject_HEAD_INIT 75 #define PyVarObject_HEAD_INIT(type, size) \ 76 PyObject_HEAD_INIT(type) size, 81 #if PY_VERSION_HEX < 0x03020000 82 # define PyErr_NewExceptionWithDoc(name, doc, base, dict) \ 83 PyErr_NewException(name, base, dict) 89 #ifndef Py_TPFLAGS_CHECKTYPES 90 # define Py_TPFLAGS_CHECKTYPES 0 94 #if PY_MAJOR_VERSION >= 3 95 # define nb_nonzero nb_bool 96 # define nb_divide nb_true_divide 97 # define nb_inplace_divide nb_inplace_true_divide 99 # define PyLongOrInt_Check(x) PyLong_Check(x) 100 # define PyLongOrInt_AS_LONG PyLong_AS_LONG 101 # define PyInt_Check PyLong_Check 102 # define PyInt_AsLong PyLong_AsLong 103 # define PyInt_AS_LONG PyLong_AS_LONG 104 # define PyLongOrInt_AsSize_t PyLong_AsSize_t 106 # define PyLongOrInt_Check(x) (PyInt_Check(x) || PyLong_Check(x)) 108 # define PyLongOrInt_AS_LONG PyInt_AsLong 110 EXPCL_PYPANDA
size_t PyLongOrInt_AsSize_t(PyObject *);
114 #if PY_MAJOR_VERSION >= 3 115 # define FMTCHAR_BYTES "y" 117 # define FMTCHAR_BYTES "s" 122 #if PY_VERSION_HEX < 0x03020000 123 typedef long Py_hash_t;
128 #if PY_MAJOR_VERSION >= 3 130 # undef _PyErr_OCCURRED 131 # define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type) 134 # if PY_VERSION_HEX < 0x03030000 135 # define PyUnicode_AsUTF8 _PyUnicode_AsString 136 # define PyUnicode_AsUTF8AndSize _PyUnicode_AsStringAndSize 142 #ifndef _PyObject_CallNoArg 143 INLINE PyObject *_PyObject_CallNoArg(PyObject *func) {
144 static PyTupleObject empty_tuple = {PyVarObject_HEAD_INIT(
nullptr, 0)};
146 _Py_AddToAllObjects((PyObject *)&empty_tuple, 0);
148 return PyObject_Call(func, (PyObject *)&empty_tuple,
nullptr);
150 # define _PyObject_CallNoArg _PyObject_CallNoArg 153 #ifndef _PyObject_FastCall 154 INLINE PyObject *_PyObject_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs) {
155 PyObject *tuple = PyTuple_New(nargs);
156 for (Py_ssize_t i = 0; i < nargs; ++i) {
157 PyTuple_SET_ITEM(tuple, i, args[i]);
160 PyObject *result = PyObject_Call(func, tuple,
nullptr);
164 # define _PyObject_FastCall _PyObject_FastCall 168 #ifndef HAVE_LONG_LONG 169 # define PyLong_FromLongLong(x) PyLong_FromLong((long) (x)) 170 # define PyLong_FromUnsignedLongLong(x) PyLong_FromUnsignedLong((unsigned long) (x)) 171 # define PyLong_AsLongLong(x) PyLong_AsLong(x) 172 # define PyLong_AsUnsignedLongLong(x) PyLong_AsUnsignedLong(x) 173 # define PyLong_AsUnsignedLongLongMask(x) PyLong_AsUnsignedLongMask(x) 174 # define PyLong_AsLongLongAndOverflow(x) PyLong_AsLongAndOverflow(x) 179 #ifndef PyDict_GET_SIZE 180 # define PyDict_GET_SIZE(mp) (((PyDictObject *)mp)->ma_used) 183 #ifndef Py_RETURN_RICHCOMPARE 184 # define Py_RETURN_RICHCOMPARE(val1, val2, op) \ 188 case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 189 case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 190 case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 191 case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 192 case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 193 case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ 203 #ifndef _PyErr_OCCURRED 204 # define _PyErr_OCCURRED() PyErr_Occurred() 207 #endif // HAVE_PYTHON 209 #endif // PY_COMPAT_H