| Index: third_party/cython/src/Cython/Utility/ModuleSetupCode.c
|
| diff --git a/third_party/cython/src/Cython/Utility/ModuleSetupCode.c b/third_party/cython/src/Cython/Utility/ModuleSetupCode.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b515b3d55d44cb9dbcf429c631ce7c83a1402420
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Utility/ModuleSetupCode.c
|
| @@ -0,0 +1,693 @@
|
| +/////////////// CModulePreamble ///////////////
|
| +
|
| +#include <stddef.h> /* For offsetof */
|
| +#ifndef offsetof
|
| +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
|
| +#endif
|
| +
|
| +#if !defined(WIN32) && !defined(MS_WINDOWS)
|
| + #ifndef __stdcall
|
| + #define __stdcall
|
| + #endif
|
| + #ifndef __cdecl
|
| + #define __cdecl
|
| + #endif
|
| + #ifndef __fastcall
|
| + #define __fastcall
|
| + #endif
|
| +#endif
|
| +
|
| +#ifndef DL_IMPORT
|
| + #define DL_IMPORT(t) t
|
| +#endif
|
| +#ifndef DL_EXPORT
|
| + #define DL_EXPORT(t) t
|
| +#endif
|
| +
|
| +#ifndef PY_LONG_LONG
|
| + #define PY_LONG_LONG LONG_LONG
|
| +#endif
|
| +
|
| +#ifndef Py_HUGE_VAL
|
| + #define Py_HUGE_VAL HUGE_VAL
|
| +#endif
|
| +
|
| +#ifdef PYPY_VERSION
|
| +#define CYTHON_COMPILING_IN_PYPY 1
|
| +#define CYTHON_COMPILING_IN_CPYTHON 0
|
| +#else
|
| +#define CYTHON_COMPILING_IN_PYPY 0
|
| +#define CYTHON_COMPILING_IN_CPYTHON 1
|
| +#endif
|
| +
|
| +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600
|
| +#define Py_OptimizeFlag 0
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02050000
|
| + typedef int Py_ssize_t;
|
| + #define PY_SSIZE_T_MAX INT_MAX
|
| + #define PY_SSIZE_T_MIN INT_MIN
|
| + #define PY_FORMAT_SIZE_T ""
|
| + #define CYTHON_FORMAT_SSIZE_T ""
|
| + #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
|
| + #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o)
|
| + #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
|
| + (PyErr_Format(PyExc_TypeError, \
|
| + "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
|
| + (PyObject*)0))
|
| + #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
|
| + !PyComplex_Check(o))
|
| + #define PyIndex_Check __Pyx_PyIndex_Check
|
| + #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
|
| + #define __PYX_BUILD_PY_SSIZE_T "i"
|
| +#else
|
| + #define __PYX_BUILD_PY_SSIZE_T "n"
|
| + #define CYTHON_FORMAT_SSIZE_T "z"
|
| + #define __Pyx_PyIndex_Check PyIndex_Check
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02060000
|
| + #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
|
| + #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
|
| + #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
|
| + #define PyVarObject_HEAD_INIT(type, size) \
|
| + PyObject_HEAD_INIT(type) size,
|
| + #define PyType_Modified(t)
|
| +
|
| + typedef struct {
|
| + void *buf;
|
| + PyObject *obj;
|
| + Py_ssize_t len;
|
| + Py_ssize_t itemsize;
|
| + int readonly;
|
| + int ndim;
|
| + char *format;
|
| + Py_ssize_t *shape;
|
| + Py_ssize_t *strides;
|
| + Py_ssize_t *suboffsets;
|
| + void *internal;
|
| + } Py_buffer;
|
| +
|
| + #define PyBUF_SIMPLE 0
|
| + #define PyBUF_WRITABLE 0x0001
|
| + #define PyBUF_FORMAT 0x0004
|
| + #define PyBUF_ND 0x0008
|
| + #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
|
| + #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
|
| + #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
|
| + #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
|
| + #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
|
| + #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
|
| + #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
|
| +
|
| + typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
|
| + typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION < 3
|
| + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
|
| + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
|
| + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
|
| + #define __Pyx_DefaultClassType PyClass_Type
|
| +#else
|
| + #define __Pyx_BUILTIN_MODULE_NAME "builtins"
|
| + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
|
| + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
|
| + #define __Pyx_DefaultClassType PyType_Type
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02060000
|
| + #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define Py_TPFLAGS_CHECKTYPES 0
|
| + #define Py_TPFLAGS_HAVE_INDEX 0
|
| +#endif
|
| +
|
| +#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
|
| + #define Py_TPFLAGS_HAVE_NEWBUFFER 0
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02060000
|
| + #define Py_TPFLAGS_HAVE_VERSION_TAG 0
|
| +#endif
|
| +#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT)
|
| + #define Py_TPFLAGS_IS_ABSTRACT 0
|
| +#endif
|
| +#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
|
| + #define Py_TPFLAGS_HAVE_FINALIZE 0
|
| +#endif
|
| +
|
| +/* new Py3.3 unicode type (PEP 393) */
|
| +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
|
| + #define CYTHON_PEP393_ENABLED 1
|
| + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \
|
| + 0 : _PyUnicode_Ready((PyObject *)(op)))
|
| + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
|
| + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
|
| + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u)
|
| + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
|
| + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
|
| +#else
|
| + #define CYTHON_PEP393_ENABLED 0
|
| + #define __Pyx_PyUnicode_READY(op) (0)
|
| + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
|
| + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
|
| + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE))
|
| + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
|
| + /* (void)(k) => avoid unused variable warning due to macro: */
|
| + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
|
| +#endif
|
| +
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
|
| + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
|
| +#else
|
| + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
|
| + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
|
| + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
|
| +#endif
|
| +
|
| +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
|
| +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
|
| +#else
|
| + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define PyBaseString_Type PyUnicode_Type
|
| + #define PyStringObject PyUnicodeObject
|
| + #define PyString_Type PyUnicode_Type
|
| + #define PyString_Check PyUnicode_Check
|
| + #define PyString_CheckExact PyUnicode_CheckExact
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02060000
|
| + #define PyBytesObject PyStringObject
|
| + #define PyBytes_Type PyString_Type
|
| + #define PyBytes_Check PyString_Check
|
| + #define PyBytes_CheckExact PyString_CheckExact
|
| + #define PyBytes_FromString PyString_FromString
|
| + #define PyBytes_FromStringAndSize PyString_FromStringAndSize
|
| + #define PyBytes_FromFormat PyString_FromFormat
|
| + #define PyBytes_DecodeEscape PyString_DecodeEscape
|
| + #define PyBytes_AsString PyString_AsString
|
| + #define PyBytes_AsStringAndSize PyString_AsStringAndSize
|
| + #define PyBytes_Size PyString_Size
|
| + #define PyBytes_AS_STRING PyString_AS_STRING
|
| + #define PyBytes_GET_SIZE PyString_GET_SIZE
|
| + #define PyBytes_Repr PyString_Repr
|
| + #define PyBytes_Concat PyString_Concat
|
| + #define PyBytes_ConcatAndDel PyString_ConcatAndDel
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
|
| + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
|
| +#else
|
| + #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \
|
| + PyString_Check(obj) || PyUnicode_Check(obj))
|
| + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02060000
|
| + #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type)
|
| + #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type)
|
| +#endif
|
| +#ifndef PySet_CheckExact
|
| + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type)
|
| +#endif
|
| +
|
| +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define PyIntObject PyLongObject
|
| + #define PyInt_Type PyLong_Type
|
| + #define PyInt_Check(op) PyLong_Check(op)
|
| + #define PyInt_CheckExact(op) PyLong_CheckExact(op)
|
| + #define PyInt_FromString PyLong_FromString
|
| + #define PyInt_FromUnicode PyLong_FromUnicode
|
| + #define PyInt_FromLong PyLong_FromLong
|
| + #define PyInt_FromSize_t PyLong_FromSize_t
|
| + #define PyInt_FromSsize_t PyLong_FromSsize_t
|
| + #define PyInt_AsLong PyLong_AsLong
|
| + #define PyInt_AS_LONG PyLong_AS_LONG
|
| + #define PyInt_AsSsize_t PyLong_AsSsize_t
|
| + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
|
| + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
|
| + #define PyNumber_Int PyNumber_Long
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define PyBoolObject PyLongObject
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x030200A4
|
| + typedef long Py_hash_t;
|
| + #define __Pyx_PyInt_FromHash_t PyInt_FromLong
|
| + #define __Pyx_PyInt_AsHash_t PyInt_AsLong
|
| +#else
|
| + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
|
| + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
|
| +#endif
|
| +
|
| +#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
|
| + #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
|
| + #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
|
| + #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
|
| +#else
|
| + #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
|
| + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
|
| + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
|
| + (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
|
| + #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
|
| + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
|
| + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
|
| + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
|
| + #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
|
| + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
|
| + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
|
| + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
|
| +#endif
|
| +
|
| +#if PY_MAJOR_VERSION >= 3
|
| + #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02050000
|
| + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n)))
|
| + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
|
| + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n)))
|
| +#else
|
| + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n))
|
| + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
|
| + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n))
|
| +#endif
|
| +
|
| +#if PY_VERSION_HEX < 0x02050000
|
| + #define __Pyx_NAMESTR(n) ((char *)(n))
|
| + #define __Pyx_DOCSTR(n) ((char *)(n))
|
| +#else
|
| + #define __Pyx_NAMESTR(n) (n)
|
| + #define __Pyx_DOCSTR(n) (n)
|
| +#endif
|
| +
|
| +/* inline attribute */
|
| +#ifndef CYTHON_INLINE
|
| + #if defined(__GNUC__)
|
| + #define CYTHON_INLINE __inline__
|
| + #elif defined(_MSC_VER)
|
| + #define CYTHON_INLINE __inline
|
| + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
| + #define CYTHON_INLINE inline
|
| + #else
|
| + #define CYTHON_INLINE
|
| + #endif
|
| +#endif
|
| +
|
| +/* restrict */
|
| +#ifndef CYTHON_RESTRICT
|
| + #if defined(__GNUC__)
|
| + #define CYTHON_RESTRICT __restrict__
|
| + #elif defined(_MSC_VER) && _MSC_VER >= 1400
|
| + #define CYTHON_RESTRICT __restrict
|
| + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
| + #define CYTHON_RESTRICT restrict
|
| + #else
|
| + #define CYTHON_RESTRICT
|
| + #endif
|
| +#endif
|
| +
|
| +#ifdef NAN
|
| +#define __PYX_NAN() ((float) NAN)
|
| +#else
|
| +static CYTHON_INLINE float __PYX_NAN() {
|
| + /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and
|
| + a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is
|
| + a quiet NaN. */
|
| + float value;
|
| + memset(&value, 0xFF, sizeof(value));
|
| + return value;
|
| +}
|
| +#endif
|
| +
|
| +// Work around clang bug http://stackoverflow.com/questions/21847816/c-invoke-nested-template-class-destructor
|
| +#ifdef __cplusplus
|
| +template<typename T>
|
| +void __Pyx_call_destructor(T* x) {
|
| + x->~T();
|
| +}
|
| +#endif
|
| +
|
| +/////////////// UtilityFunctionPredeclarations.proto ///////////////
|
| +
|
| +/* unused attribute */
|
| +#ifndef CYTHON_UNUSED
|
| +# if defined(__GNUC__)
|
| +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
|
| +# define CYTHON_UNUSED __attribute__ ((__unused__))
|
| +# else
|
| +# define CYTHON_UNUSED
|
| +# endif
|
| +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
|
| +# define CYTHON_UNUSED __attribute__ ((__unused__))
|
| +# else
|
| +# define CYTHON_UNUSED
|
| +# endif
|
| +#endif
|
| +
|
| +typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
|
| + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
|
| +
|
| +/////////////// ForceInitThreads.proto ///////////////
|
| +
|
| +#ifndef __PYX_FORCE_INIT_THREADS
|
| + #define __PYX_FORCE_INIT_THREADS 0
|
| +#endif
|
| +
|
| +/////////////// InitThreads.init ///////////////
|
| +
|
| +#ifdef WITH_THREAD
|
| +PyEval_InitThreads();
|
| +#endif
|
| +
|
| +/////////////// CodeObjectCache.proto ///////////////
|
| +
|
| +typedef struct {
|
| + int code_line;
|
| + PyCodeObject* code_object;
|
| +} __Pyx_CodeObjectCacheEntry;
|
| +
|
| +struct __Pyx_CodeObjectCache {
|
| + int count;
|
| + int max_count;
|
| + __Pyx_CodeObjectCacheEntry* entries;
|
| +};
|
| +
|
| +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
|
| +
|
| +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
|
| +static PyCodeObject *__pyx_find_code_object(int code_line);
|
| +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
|
| +
|
| +/////////////// CodeObjectCache ///////////////
|
| +// Note that errors are simply ignored in the code below.
|
| +// This is just a cache, if a lookup or insertion fails - so what?
|
| +
|
| +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
|
| + int start = 0, mid = 0, end = count - 1;
|
| + if (end >= 0 && code_line > entries[end].code_line) {
|
| + return count;
|
| + }
|
| + while (start < end) {
|
| + mid = (start + end) / 2;
|
| + if (code_line < entries[mid].code_line) {
|
| + end = mid;
|
| + } else if (code_line > entries[mid].code_line) {
|
| + start = mid + 1;
|
| + } else {
|
| + return mid;
|
| + }
|
| + }
|
| + if (code_line <= entries[mid].code_line) {
|
| + return mid;
|
| + } else {
|
| + return mid + 1;
|
| + }
|
| +}
|
| +
|
| +static PyCodeObject *__pyx_find_code_object(int code_line) {
|
| + PyCodeObject* code_object;
|
| + int pos;
|
| + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
|
| + return NULL;
|
| + }
|
| + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
|
| + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
|
| + return NULL;
|
| + }
|
| + code_object = __pyx_code_cache.entries[pos].code_object;
|
| + Py_INCREF(code_object);
|
| + return code_object;
|
| +}
|
| +
|
| +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
| + int pos, i;
|
| + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
|
| + if (unlikely(!code_line)) {
|
| + return;
|
| + }
|
| + if (unlikely(!entries)) {
|
| + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
|
| + if (likely(entries)) {
|
| + __pyx_code_cache.entries = entries;
|
| + __pyx_code_cache.max_count = 64;
|
| + __pyx_code_cache.count = 1;
|
| + entries[0].code_line = code_line;
|
| + entries[0].code_object = code_object;
|
| + Py_INCREF(code_object);
|
| + }
|
| + return;
|
| + }
|
| + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
|
| + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
|
| + PyCodeObject* tmp = entries[pos].code_object;
|
| + entries[pos].code_object = code_object;
|
| + Py_DECREF(tmp);
|
| + return;
|
| + }
|
| + if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
|
| + int new_max = __pyx_code_cache.max_count + 64;
|
| + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
|
| + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
|
| + if (unlikely(!entries)) {
|
| + return;
|
| + }
|
| + __pyx_code_cache.entries = entries;
|
| + __pyx_code_cache.max_count = new_max;
|
| + }
|
| + for (i=__pyx_code_cache.count; i>pos; i--) {
|
| + entries[i] = entries[i-1];
|
| + }
|
| + entries[pos].code_line = code_line;
|
| + entries[pos].code_object = code_object;
|
| + __pyx_code_cache.count++;
|
| + Py_INCREF(code_object);
|
| +}
|
| +
|
| +/////////////// CodeObjectCache.cleanup ///////////////
|
| +
|
| + if (__pyx_code_cache.entries) {
|
| + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
|
| + int i, count = __pyx_code_cache.count;
|
| + __pyx_code_cache.count = 0;
|
| + __pyx_code_cache.max_count = 0;
|
| + __pyx_code_cache.entries = NULL;
|
| + for (i=0; i<count; i++) {
|
| + Py_DECREF(entries[i].code_object);
|
| + }
|
| + PyMem_Free(entries);
|
| + }
|
| +
|
| +/////////////// CheckBinaryVersion.proto ///////////////
|
| +
|
| +static int __Pyx_check_binary_version(void);
|
| +
|
| +/////////////// CheckBinaryVersion ///////////////
|
| +
|
| +static int __Pyx_check_binary_version(void) {
|
| + char ctversion[4], rtversion[4];
|
| + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
|
| + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
|
| + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
|
| + char message[200];
|
| + PyOS_snprintf(message, sizeof(message),
|
| + "compiletime version %s of module '%.100s' "
|
| + "does not match runtime version %s",
|
| + ctversion, __Pyx_MODULE_NAME, rtversion);
|
| + #if PY_VERSION_HEX < 0x02050000
|
| + return PyErr_Warn(NULL, message);
|
| + #else
|
| + return PyErr_WarnEx(NULL, message, 1);
|
| + #endif
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| +/////////////// Refnanny.proto ///////////////
|
| +
|
| +#ifndef CYTHON_REFNANNY
|
| + #define CYTHON_REFNANNY 0
|
| +#endif
|
| +
|
| +#if CYTHON_REFNANNY
|
| + typedef struct {
|
| + void (*INCREF)(void*, PyObject*, int);
|
| + void (*DECREF)(void*, PyObject*, int);
|
| + void (*GOTREF)(void*, PyObject*, int);
|
| + void (*GIVEREF)(void*, PyObject*, int);
|
| + void* (*SetupContext)(const char*, int, const char*);
|
| + void (*FinishContext)(void**);
|
| + } __Pyx_RefNannyAPIStruct;
|
| + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
|
| + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
|
| + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
|
| +#ifdef WITH_THREAD
|
| + #define __Pyx_RefNannySetupContext(name, acquire_gil) \
|
| + if (acquire_gil) { \
|
| + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
|
| + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
|
| + PyGILState_Release(__pyx_gilstate_save); \
|
| + } else { \
|
| + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
|
| + }
|
| +#else
|
| + #define __Pyx_RefNannySetupContext(name, acquire_gil) \
|
| + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
|
| +#endif
|
| + #define __Pyx_RefNannyFinishContext() \
|
| + __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
|
| + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
|
| + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
|
| + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
|
| + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
|
| + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
|
| + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
|
| + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
|
| + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
|
| +#else
|
| + #define __Pyx_RefNannyDeclarations
|
| + #define __Pyx_RefNannySetupContext(name, acquire_gil)
|
| + #define __Pyx_RefNannyFinishContext()
|
| + #define __Pyx_INCREF(r) Py_INCREF(r)
|
| + #define __Pyx_DECREF(r) Py_DECREF(r)
|
| + #define __Pyx_GOTREF(r)
|
| + #define __Pyx_GIVEREF(r)
|
| + #define __Pyx_XINCREF(r) Py_XINCREF(r)
|
| + #define __Pyx_XDECREF(r) Py_XDECREF(r)
|
| + #define __Pyx_XGOTREF(r)
|
| + #define __Pyx_XGIVEREF(r)
|
| +#endif /* CYTHON_REFNANNY */
|
| +
|
| +#define __Pyx_XDECREF_SET(r, v) do { \
|
| + PyObject *tmp = (PyObject *) r; \
|
| + r = v; __Pyx_XDECREF(tmp); \
|
| + } while (0)
|
| +#define __Pyx_DECREF_SET(r, v) do { \
|
| + PyObject *tmp = (PyObject *) r; \
|
| + r = v; __Pyx_DECREF(tmp); \
|
| + } while (0)
|
| +
|
| +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
|
| +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
|
| +
|
| +/////////////// Refnanny ///////////////
|
| +
|
| +#if CYTHON_REFNANNY
|
| +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
|
| + PyObject *m = NULL, *p = NULL;
|
| + void *r = NULL;
|
| + m = PyImport_ImportModule((char *)modname);
|
| + if (!m) goto end;
|
| + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
|
| + if (!p) goto end;
|
| + r = PyLong_AsVoidPtr(p);
|
| +end:
|
| + Py_XDECREF(p);
|
| + Py_XDECREF(m);
|
| + return (__Pyx_RefNannyAPIStruct *)r;
|
| +}
|
| +#endif /* CYTHON_REFNANNY */
|
| +
|
| +/////////////// RegisterModuleCleanup.proto ///////////////
|
| +//@substitute: naming
|
| +
|
| +static void ${cleanup_cname}(PyObject *self); /*proto*/
|
| +static int __Pyx_RegisterCleanup(void); /*proto*/
|
| +
|
| +/////////////// RegisterModuleCleanup ///////////////
|
| +//@substitute: naming
|
| +//@requires: ImportExport.c::ModuleImport
|
| +
|
| +#if PY_MAJOR_VERSION < 3
|
| +static PyObject* ${cleanup_cname}_atexit(PyObject *module, CYTHON_UNUSED PyObject *unused) {
|
| + ${cleanup_cname}(module);
|
| + Py_INCREF(Py_None); return Py_None;
|
| +}
|
| +
|
| +static int __Pyx_RegisterCleanup(void) {
|
| + // Don't use Py_AtExit because that has a 32-call limit and is called
|
| + // after python finalization.
|
| + // Also, we try to prepend the cleanup function to "atexit._exithandlers"
|
| + // in Py2 because CPython runs them last-to-first. Being run last allows
|
| + // user exit code to run before us that may depend on the globals
|
| + // and cached objects that we are about to clean up.
|
| +
|
| + static PyMethodDef cleanup_def = {
|
| + __Pyx_NAMESTR("__cleanup"), (PyCFunction)${cleanup_cname}_atexit, METH_NOARGS, 0};
|
| +
|
| + PyObject *cleanup_func = 0;
|
| + PyObject *atexit = 0;
|
| + PyObject *reg = 0;
|
| + PyObject *args = 0;
|
| + PyObject *res = 0;
|
| + int ret = -1;
|
| +
|
| + cleanup_func = PyCFunction_New(&cleanup_def, 0);
|
| + if (!cleanup_func)
|
| + goto bad;
|
| +
|
| + atexit = __Pyx_ImportModule("atexit");
|
| + if (!atexit)
|
| + goto bad;
|
| + reg = __Pyx_GetAttrString(atexit, "_exithandlers");
|
| + if (reg && PyList_Check(reg)) {
|
| + PyObject *a, *kw;
|
| + a = PyTuple_New(0);
|
| + kw = PyDict_New();
|
| + if (!a || !kw) {
|
| + Py_XDECREF(a);
|
| + Py_XDECREF(kw);
|
| + goto bad;
|
| + }
|
| + args = PyTuple_Pack(3, cleanup_func, a, kw);
|
| + Py_DECREF(a);
|
| + Py_DECREF(kw);
|
| + if (!args)
|
| + goto bad;
|
| + ret = PyList_Insert(reg, 0, args);
|
| + } else {
|
| + if (!reg)
|
| + PyErr_Clear();
|
| + Py_XDECREF(reg);
|
| + reg = __Pyx_GetAttrString(atexit, "register");
|
| + if (!reg)
|
| + goto bad;
|
| + args = PyTuple_Pack(1, cleanup_func);
|
| + if (!args)
|
| + goto bad;
|
| + res = PyObject_CallObject(reg, args);
|
| + if (!res)
|
| + goto bad;
|
| + ret = 0;
|
| + }
|
| +bad:
|
| + Py_XDECREF(cleanup_func);
|
| + Py_XDECREF(atexit);
|
| + Py_XDECREF(reg);
|
| + Py_XDECREF(args);
|
| + Py_XDECREF(res);
|
| + return ret;
|
| +}
|
| +#else
|
| +// fake call purely to work around "unused function" warning for __Pyx_ImportModule()
|
| +static int __Pyx_RegisterCleanup(void) {
|
| + if (0) __Pyx_ImportModule(NULL);
|
| + return 0;
|
| +}
|
| +#endif
|
|
|