| Index: third_party/cython/src/Cython/Utility/Builtins.c
|
| diff --git a/third_party/cython/src/Cython/Utility/Builtins.c b/third_party/cython/src/Cython/Utility/Builtins.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..537669d1a7de35db1b37035a44807df5ec38de97
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Utility/Builtins.c
|
| @@ -0,0 +1,446 @@
|
| +/*
|
| + * Special implementations of built-in functions and methods.
|
| + *
|
| + * Optional optimisations for builtins are in Optimize.c.
|
| + *
|
| + * General object operations and protocols are in ObjectHandling.c.
|
| + */
|
| +
|
| +//////////////////// Globals.proto ////////////////////
|
| +
|
| +static PyObject* __Pyx_Globals(void); /*proto*/
|
| +
|
| +//////////////////// Globals ////////////////////
|
| +//@substitute: naming
|
| +//@requires: ObjectHandling.c::GetAttr
|
| +
|
| +// This is a stub implementation until we have something more complete.
|
| +// Currently, we only handle the most common case of a read-only dict
|
| +// of Python names. Supporting cdef names in the module and write
|
| +// access requires a rewrite as a dedicated class.
|
| +
|
| +static PyObject* __Pyx_Globals(void) {
|
| + Py_ssize_t i;
|
| + //PyObject *d;
|
| + PyObject *names = NULL;
|
| + PyObject *globals = PyObject_GetAttr($module_cname, PYIDENT("__dict__"));
|
| + if (!globals) {
|
| + PyErr_SetString(PyExc_TypeError,
|
| + "current module must have __dict__ attribute");
|
| + goto bad;
|
| + }
|
| + names = PyObject_Dir($module_cname);
|
| + if (!names)
|
| + goto bad;
|
| + for (i = PyList_GET_SIZE(names)-1; i >= 0; i--) {
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + PyObject* name = PySequence_GetItem(names, i);
|
| + if (!name)
|
| + goto bad;
|
| +#else
|
| + PyObject* name = PyList_GET_ITEM(names, i);
|
| +#endif
|
| + if (!PyDict_Contains(globals, name)) {
|
| + PyObject* value = __Pyx_GetAttr($module_cname, name);
|
| + if (!value) {
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + Py_DECREF(name);
|
| +#endif
|
| + goto bad;
|
| + }
|
| + if (PyDict_SetItem(globals, name, value) < 0) {
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + Py_DECREF(name);
|
| +#endif
|
| + Py_DECREF(value);
|
| + goto bad;
|
| + }
|
| + }
|
| +#if CYTHON_COMPILING_IN_PYPY
|
| + Py_DECREF(name);
|
| +#endif
|
| + }
|
| + Py_DECREF(names);
|
| + return globals;
|
| + // d = PyDictProxy_New(globals);
|
| + // Py_DECREF(globals);
|
| + // return d;
|
| +bad:
|
| + Py_XDECREF(names);
|
| + Py_XDECREF(globals);
|
| + return NULL;
|
| +}
|
| +
|
| +//////////////////// PyExecGlobals.proto ////////////////////
|
| +
|
| +static PyObject* __Pyx_PyExecGlobals(PyObject*);
|
| +
|
| +//////////////////// PyExecGlobals ////////////////////
|
| +//@requires: Globals
|
| +//@requires: PyExec
|
| +
|
| +static PyObject* __Pyx_PyExecGlobals(PyObject* code) {
|
| + PyObject* result;
|
| + PyObject* globals = __Pyx_Globals();
|
| + if (unlikely(!globals))
|
| + return NULL;
|
| + result = __Pyx_PyExec2(code, globals);
|
| + Py_DECREF(globals);
|
| + return result;
|
| +}
|
| +
|
| +//////////////////// PyExec.proto ////////////////////
|
| +
|
| +static PyObject* __Pyx_PyExec3(PyObject*, PyObject*, PyObject*);
|
| +static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject*, PyObject*);
|
| +
|
| +//////////////////// PyExec ////////////////////
|
| +//@substitute: naming
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject* o, PyObject* globals) {
|
| + return __Pyx_PyExec3(o, globals, NULL);
|
| +}
|
| +
|
| +static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals) {
|
| + PyObject* result;
|
| + PyObject* s = 0;
|
| + char *code = 0;
|
| +
|
| + if (!globals || globals == Py_None) {
|
| + globals = PyModule_GetDict($module_cname);
|
| + if (!globals)
|
| + goto bad;
|
| + } else if (!PyDict_Check(globals)) {
|
| + PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.200s",
|
| + Py_TYPE(globals)->tp_name);
|
| + goto bad;
|
| + }
|
| + if (!locals || locals == Py_None) {
|
| + locals = globals;
|
| + }
|
| +
|
| + if (PyDict_GetItem(globals, PYIDENT("__builtins__")) == NULL) {
|
| + if (PyDict_SetItem(globals, PYIDENT("__builtins__"), PyEval_GetBuiltins()) < 0)
|
| + goto bad;
|
| + }
|
| +
|
| + if (PyCode_Check(o)) {
|
| + if (PyCode_GetNumFree((PyCodeObject *)o) > 0) {
|
| + PyErr_SetString(PyExc_TypeError,
|
| + "code object passed to exec() may not contain free variables");
|
| + goto bad;
|
| + }
|
| + #if PY_VERSION_HEX < 0x030200B1
|
| + result = PyEval_EvalCode((PyCodeObject *)o, globals, locals);
|
| + #else
|
| + result = PyEval_EvalCode(o, globals, locals);
|
| + #endif
|
| + } else {
|
| + PyCompilerFlags cf;
|
| + cf.cf_flags = 0;
|
| + if (PyUnicode_Check(o)) {
|
| + cf.cf_flags = PyCF_SOURCE_IS_UTF8;
|
| + s = PyUnicode_AsUTF8String(o);
|
| + if (!s) goto bad;
|
| + o = s;
|
| + #if PY_MAJOR_VERSION >= 3
|
| + } else if (!PyBytes_Check(o)) {
|
| + #else
|
| + } else if (!PyString_Check(o)) {
|
| + #endif
|
| + PyErr_Format(PyExc_TypeError,
|
| + "exec: arg 1 must be string, bytes or code object, got %.200s",
|
| + Py_TYPE(o)->tp_name);
|
| + goto bad;
|
| + }
|
| + #if PY_MAJOR_VERSION >= 3
|
| + code = PyBytes_AS_STRING(o);
|
| + #else
|
| + code = PyString_AS_STRING(o);
|
| + #endif
|
| + if (PyEval_MergeCompilerFlags(&cf)) {
|
| + result = PyRun_StringFlags(code, Py_file_input, globals, locals, &cf);
|
| + } else {
|
| + result = PyRun_String(code, Py_file_input, globals, locals);
|
| + }
|
| + Py_XDECREF(s);
|
| + }
|
| +
|
| + return result;
|
| +bad:
|
| + Py_XDECREF(s);
|
| + return 0;
|
| +}
|
| +
|
| +//////////////////// GetAttr3.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); /*proto*/
|
| +
|
| +//////////////////// GetAttr3 ////////////////////
|
| +//@requires: ObjectHandling.c::GetAttr
|
| +
|
| +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
|
| + PyObject *r = __Pyx_GetAttr(o, n);
|
| + if (unlikely(!r)) {
|
| + if (!PyErr_ExceptionMatches(PyExc_AttributeError))
|
| + goto bad;
|
| + PyErr_Clear();
|
| + r = d;
|
| + Py_INCREF(d);
|
| + }
|
| + return r;
|
| +bad:
|
| + return NULL;
|
| +}
|
| +
|
| +//////////////////// Intern.proto ////////////////////
|
| +
|
| +static PyObject* __Pyx_Intern(PyObject* s); /* proto */
|
| +
|
| +//////////////////// Intern ////////////////////
|
| +
|
| +static PyObject* __Pyx_Intern(PyObject* s) {
|
| + if (!(likely(PyString_CheckExact(s)))) {
|
| + PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(s)->tp_name);
|
| + return 0;
|
| + }
|
| + Py_INCREF(s);
|
| + #if PY_MAJOR_VERSION >= 3
|
| + PyUnicode_InternInPlace(&s);
|
| + #else
|
| + PyString_InternInPlace(&s);
|
| + #endif
|
| + return s;
|
| +}
|
| +
|
| +//////////////////// abs_int.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE unsigned int __Pyx_abs_int(int x) {
|
| + if (unlikely(x == -INT_MAX-1))
|
| + return ((unsigned int)INT_MAX) + 1U;
|
| + return (unsigned int) abs(x);
|
| +}
|
| +
|
| +//////////////////// abs_long.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE unsigned long __Pyx_abs_long(long x) {
|
| + if (unlikely(x == -LONG_MAX-1))
|
| + return ((unsigned long)LONG_MAX) + 1U;
|
| + return (unsigned long) labs(x);
|
| +}
|
| +
|
| +//////////////////// abs_longlong.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_abs_longlong(PY_LONG_LONG x) {
|
| +#ifndef PY_LLONG_MAX
|
| +#ifdef LLONG_MAX
|
| + const PY_LONG_LONG PY_LLONG_MAX = LLONG_MAX;
|
| +#else
|
| + // copied from pyport.h in CPython 3.3, missing in 2.4
|
| + const PY_LONG_LONG PY_LLONG_MAX = (1 + 2 * ((1LL << (CHAR_BIT * sizeof(PY_LONG_LONG) - 2)) - 1));
|
| +#endif
|
| +#endif
|
| + if (unlikely(x == -PY_LLONG_MAX-1))
|
| + return ((unsigned PY_LONG_LONG)PY_LLONG_MAX) + 1U;
|
| +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
| + return (unsigned PY_LONG_LONG) llabs(x);
|
| +#else
|
| + return (x<0) ? (unsigned PY_LONG_LONG)-x : (unsigned PY_LONG_LONG)x;
|
| +#endif
|
| +}
|
| +
|
| +//////////////////// pow2.proto ////////////////////
|
| +
|
| +#define __Pyx_PyNumber_Power2(a, b) PyNumber_Power(a, b, Py_None)
|
| +
|
| +//////////////////// py_dict_keys.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_keys ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
|
| + if (PY_MAJOR_VERSION >= 3)
|
| + return __Pyx_PyObject_CallMethod1((PyObject*)&PyDict_Type, PYIDENT("keys"), d);
|
| + else
|
| + return PyDict_Keys(d);
|
| +}
|
| +
|
| +//////////////////// py_dict_values.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_values ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
|
| + if (PY_MAJOR_VERSION >= 3)
|
| + return __Pyx_PyObject_CallMethod1((PyObject*)&PyDict_Type, PYIDENT("values"), d);
|
| + else
|
| + return PyDict_Values(d);
|
| +}
|
| +
|
| +//////////////////// py_dict_items.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_items ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
|
| + if (PY_MAJOR_VERSION >= 3)
|
| + return __Pyx_PyObject_CallMethod1((PyObject*)&PyDict_Type, PYIDENT("items"), d);
|
| + else
|
| + return PyDict_Items(d);
|
| +}
|
| +
|
| +//////////////////// py_dict_iterkeys.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_iterkeys ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("keys") : PYIDENT("iterkeys"));
|
| +}
|
| +
|
| +//////////////////// py_dict_itervalues.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_itervalues ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("values") : PYIDENT("itervalues"));
|
| +}
|
| +
|
| +//////////////////// py_dict_iteritems.proto ////////////////////
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_iteritems ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("items") : PYIDENT("iteritems"));
|
| +}
|
| +
|
| +//////////////////// py_dict_viewkeys.proto ////////////////////
|
| +
|
| +#if PY_VERSION_HEX < 0x02070000
|
| +#error This module uses dict views, which require Python 2.7 or later
|
| +#endif
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_viewkeys ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("keys") : PYIDENT("viewkeys"));
|
| +}
|
| +
|
| +//////////////////// py_dict_viewvalues.proto ////////////////////
|
| +
|
| +#if PY_VERSION_HEX < 0x02070000
|
| +#error This module uses dict views, which require Python 2.7 or later
|
| +#endif
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_viewvalues ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("values") : PYIDENT("viewvalues"));
|
| +}
|
| +
|
| +//////////////////// py_dict_viewitems.proto ////////////////////
|
| +
|
| +#if PY_VERSION_HEX < 0x02070000
|
| +#error This module uses dict views, which require Python 2.7 or later
|
| +#endif
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d); /*proto*/
|
| +
|
| +//////////////////// py_dict_viewitems ////////////////////
|
| +//@requires: ObjectHandling.c::PyObjectCallMethod
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d) {
|
| + return __Pyx_PyObject_CallMethod0(d, (PY_MAJOR_VERSION >= 3) ? PYIDENT("items") : PYIDENT("viewitems"));
|
| +}
|
| +
|
| +//////////////////// pyset_compat.proto ////////////////////
|
| +
|
| +#if PY_VERSION_HEX < 0x02050000
|
| +#ifndef PyAnySet_CheckExact
|
| +
|
| +#define PyAnySet_CheckExact(ob) \
|
| + ((ob)->ob_type == &PySet_Type || \
|
| + (ob)->ob_type == &PyFrozenSet_Type)
|
| +
|
| +#define PySet_New(iterable) \
|
| + PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL)
|
| +
|
| +#define PyFrozenSet_New(iterable) \
|
| + PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL)
|
| +
|
| +#define PySet_Size(anyset) \
|
| + PyObject_Size((anyset))
|
| +
|
| +#define PySet_GET_SIZE(anyset) \
|
| + PyObject_Size((anyset))
|
| +
|
| +#define PySet_Contains(anyset, key) \
|
| + PySequence_Contains((anyset), (key))
|
| +
|
| +#define PySet_Pop(set) \
|
| + PyObject_CallMethod((set), (char*)"pop", NULL)
|
| +
|
| +static CYTHON_INLINE int PySet_Clear(PyObject *set) {
|
| + PyObject *ret = PyObject_CallMethod(set, (char*)"clear", NULL);
|
| + if (!ret) return -1;
|
| + Py_DECREF(ret); return 0;
|
| +}
|
| +
|
| +static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) {
|
| + PyObject *ret = PyObject_CallMethod(set, (char*)"discard", (char*)"(O)", key);
|
| + if (!ret) return -1;
|
| + Py_DECREF(ret); return 0;
|
| +}
|
| +
|
| +static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) {
|
| + PyObject *ret = PyObject_CallMethod(set, (char*)"add", (char*)"(O)", key);
|
| + if (!ret) return -1;
|
| + Py_DECREF(ret); return 0;
|
| +}
|
| +
|
| +#endif /* PyAnySet_CheckExact (<= Py2.4) */
|
| +#endif /* < Py2.5 */
|
| +
|
| +//////////////////// pyfrozenset_new.proto ////////////////////
|
| +//@substitute: naming
|
| +//@requires: pyset_compat
|
| +
|
| +static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
|
| + if (it) {
|
| + PyObject* result;
|
| + if (PyFrozenSet_CheckExact(it)) {
|
| + Py_INCREF(it);
|
| + return it;
|
| + }
|
| + result = PyFrozenSet_New(it);
|
| + if (unlikely(!result))
|
| + return NULL;
|
| + if (likely(PySet_GET_SIZE(result)))
|
| + return result;
|
| + // empty frozenset is a singleton
|
| + // seems wasteful, but CPython does the same
|
| + Py_DECREF(result);
|
| + }
|
| + #if CYTHON_COMPILING_IN_CPYTHON
|
| + return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, $empty_tuple, NULL);
|
| + #else
|
| + return PyObject_Call((PyObject*)&PyFrozenSet_Type, $empty_tuple, NULL);
|
| + #endif
|
| +}
|
|
|