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 |
+} |