Spaces:
Build error
Build error
/* | |
* 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 *names; | |
PyObject *globals = $moddict_cname; | |
Py_INCREF(globals); | |
names = PyObject_Dir($module_cname); | |
if (!names) | |
goto bad; | |
for (i = PyList_GET_SIZE(names)-1; i >= 0; i--) { | |
PyObject* name = PySequence_ITEM(names, i); | |
if (!name) | |
goto bad; | |
PyObject* name = PyList_GET_ITEM(names, i); | |
if (!PyDict_Contains(globals, name)) { | |
PyObject* value = __Pyx_GetAttr($module_cname, name); | |
if (!value) { | |
Py_DECREF(name); | |
goto bad; | |
} | |
if (PyDict_SetItem(globals, name, value) < 0) { | |
Py_DECREF(name); | |
Py_DECREF(value); | |
goto bad; | |
} | |
} | |
Py_DECREF(name); | |
} | |
Py_DECREF(names); | |
return globals; | |
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 = $moddict_cname; | |
} 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 (__Pyx_PyDict_GetItemStr(globals, PYIDENT("__builtins__")) == NULL) { | |
if (PyDict_SetItem(globals, PYIDENT("__builtins__"), PyEval_GetBuiltins()) < 0) | |
goto bad; | |
} | |
if (PyCode_Check(o)) { | |
if (__Pyx_PyCode_HasFreeVars((PyCodeObject *)o)) { | |
PyErr_SetString(PyExc_TypeError, | |
"code object passed to exec() may not contain free variables"); | |
goto bad; | |
} | |
result = PyEval_EvalCode((PyCodeObject *)o, globals, locals); | |
result = PyEval_EvalCode(o, globals, locals); | |
} else { | |
PyCompilerFlags cf; | |
cf.cf_flags = 0; | |
cf.cf_feature_version = PY_MINOR_VERSION; | |
if (PyUnicode_Check(o)) { | |
cf.cf_flags = PyCF_SOURCE_IS_UTF8; | |
s = PyUnicode_AsUTF8String(o); | |
if (!s) goto bad; | |
o = s; | |
} else if (!PyBytes_Check(o)) { | |
} else if (!PyString_Check(o)) { | |
PyErr_Format(PyExc_TypeError, | |
"exec: arg 1 must be string, bytes or code object, got %.200s", | |
Py_TYPE(o)->tp_name); | |
goto bad; | |
} | |
code = PyBytes_AS_STRING(o); | |
code = PyString_AS_STRING(o); | |
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 | |
//@requires: Exceptions.c::PyThreadStateGet | |
//@requires: Exceptions.c::PyErrFetchRestore | |
//@requires: Exceptions.c::PyErrExceptionMatches | |
static PyObject *__Pyx_GetAttr3Default(PyObject *d) { | |
__Pyx_PyThreadState_declare | |
__Pyx_PyThreadState_assign | |
if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) | |
return NULL; | |
__Pyx_PyErr_Clear(); | |
Py_INCREF(d); | |
return d; | |
} | |
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { | |
PyObject *r = __Pyx_GetAttr(o, n); | |
return (likely(r)) ? r : __Pyx_GetAttr3Default(d); | |
} | |
//////////////////// HasAttr.proto //////////////////// | |
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); /*proto*/ | |
//////////////////// HasAttr //////////////////// | |
//@requires: ObjectHandling.c::GetAttr | |
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { | |
PyObject *r; | |
if (unlikely(!__Pyx_PyBaseString_Check(n))) { | |
PyErr_SetString(PyExc_TypeError, | |
"hasattr(): attribute name must be string"); | |
return -1; | |
} | |
r = __Pyx_GetAttr(o, n); | |
if (unlikely(!r)) { | |
PyErr_Clear(); | |
return 0; | |
} else { | |
Py_DECREF(r); | |
return 1; | |
} | |
} | |
//////////////////// 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); | |
PyUnicode_InternInPlace(&s); | |
PyString_InternInPlace(&s); | |
return s; | |
} | |
//////////////////// abs_longlong.proto //////////////////// | |
static CYTHON_INLINE PY_LONG_LONG __Pyx_abs_longlong(PY_LONG_LONG x) { | |
return std::abs(x); | |
return llabs(x); | |
// abs() is defined for long, but 64-bits type on MSVC is long long. | |
// Use MS-specific _abs64() instead, which returns the original (negative) value for abs(-MAX-1) | |
return _abs64(x); | |
// gcc or clang on 64 bit windows. | |
return __builtin_llabs(x); | |
if (sizeof(PY_LONG_LONG) <= sizeof(Py_ssize_t)) | |
return __Pyx_sst_abs(x); | |
return (x<0) ? -x : x; | |
} | |
//////////////////// py_abs.proto //////////////////// | |
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *num);/*proto*/ | |
//////////////////// py_abs //////////////////// | |
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *n) { | |
if (likely(Py_SIZE(n) == -1)) { | |
// digits are unsigned | |
return PyLong_FromLong(((PyLongObject*)n)->ob_digit[0]); | |
} | |
{ | |
PyObject *copy = _PyLong_Copy((PyLongObject*)n); | |
if (likely(copy)) { | |
// negate the size to swap the sign | |
__Pyx_SET_SIZE(copy, -Py_SIZE(copy)); | |
} | |
return copy; | |
} | |
return PyNumber_Negative(n); | |
} | |
//////////////////// pow2.proto //////////////////// | |
//////////////////// object_ord.proto //////////////////// | |
//@requires: TypeConversion.c::UnicodeAsUCS4 | |
static long __Pyx__PyObject_Ord(PyObject* c); /*proto*/ | |
//////////////////// object_ord //////////////////// | |
static long __Pyx__PyObject_Ord(PyObject* c) { | |
Py_ssize_t size; | |
if (PyBytes_Check(c)) { | |
size = PyBytes_GET_SIZE(c); | |
if (likely(size == 1)) { | |
return (unsigned char) PyBytes_AS_STRING(c)[0]; | |
} | |
} else if (PyUnicode_Check(c)) { | |
return (long)__Pyx_PyUnicode_AsPy_UCS4(c); | |
} else if (PyByteArray_Check(c)) { | |
size = PyByteArray_GET_SIZE(c); | |
if (likely(size == 1)) { | |
return (unsigned char) PyByteArray_AS_STRING(c)[0]; | |
} | |
} else { | |
// FIXME: support character buffers - but CPython doesn't support them either | |
PyErr_Format(PyExc_TypeError, | |
"ord() expected string of length 1, but %.200s found", Py_TYPE(c)->tp_name); | |
return (long)(Py_UCS4)-1; | |
} | |
PyErr_Format(PyExc_TypeError, | |
"ord() expected a character, but string of length %zd found", size); | |
return (long)(Py_UCS4)-1; | |
} | |
//////////////////// py_dict_keys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_keys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return PyDict_Keys(d); | |
} | |
//////////////////// py_dict_values.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/ | |
//////////////////// py_dict_values //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return PyDict_Values(d); | |
} | |
//////////////////// py_dict_items.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d); /*proto*/ | |
//////////////////// py_dict_items //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return PyDict_Items(d); | |
} | |
//////////////////// py_dict_iterkeys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_iterkeys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "iterkeys", d); | |
} | |
//////////////////// py_dict_itervalues.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d); /*proto*/ | |
//////////////////// py_dict_itervalues //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "itervalues", d); | |
} | |
//////////////////// py_dict_iteritems.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d); /*proto*/ | |
//////////////////// py_dict_iteritems //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "iteritems", d); | |
} | |
//////////////////// py_dict_viewkeys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewkeys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewkeys", d); | |
} | |
//////////////////// py_dict_viewvalues.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewvalues //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewvalues", d); | |
} | |
//////////////////// py_dict_viewitems.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewitems //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewitems", d); | |
} | |
//////////////////// pyfrozenset_new.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it); | |
//////////////////// pyfrozenset_new //////////////////// | |
//@substitute: naming | |
static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) { | |
if (it) { | |
PyObject* result; | |
// PyPy currently lacks PyFrozenSet_CheckExact() and PyFrozenSet_New() | |
PyObject* args; | |
args = PyTuple_Pack(1, it); | |
if (unlikely(!args)) | |
return NULL; | |
result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL); | |
Py_DECREF(args); | |
return result; | |
if (PyFrozenSet_CheckExact(it)) { | |
Py_INCREF(it); | |
return it; | |
} | |
result = PyFrozenSet_New(it); | |
if (unlikely(!result)) | |
return NULL; | |
if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result))) | |
return result; | |
// empty frozenset is a singleton (on Python <3.10) | |
// seems wasteful, but CPython does the same | |
Py_DECREF(result); | |
} | |
return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, $empty_tuple, NULL); | |
return PyObject_Call((PyObject*)&PyFrozenSet_Type, $empty_tuple, NULL); | |
} | |
//////////////////// PySet_Update.proto //////////////////// | |
static CYTHON_INLINE int __Pyx_PySet_Update(PyObject* set, PyObject* it); /*proto*/ | |
//////////////////// PySet_Update //////////////////// | |
static CYTHON_INLINE int __Pyx_PySet_Update(PyObject* set, PyObject* it) { | |
PyObject *retval; | |
if (PyAnySet_Check(it)) { | |
if (PySet_GET_SIZE(it) == 0) | |
return 0; | |
// fast and safe case: CPython will update our result set and return it | |
retval = PySet_Type.tp_as_number->nb_inplace_or(set, it); | |
if (likely(retval == set)) { | |
Py_DECREF(retval); | |
return 0; | |
} | |
if (unlikely(!retval)) | |
return -1; | |
// unusual result, fall through to set.update() call below | |
Py_DECREF(retval); | |
} | |
retval = CALL_UNBOUND_METHOD(PySet_Type, "update", set, it); | |
if (unlikely(!retval)) return -1; | |
Py_DECREF(retval); | |
return 0; | |
} | |