Download venv/lib/python3.10/site-packages/Cython/Utility/Builtins.c from Matt300209/eval_venv: direct link, hf CLI and curl.
- Browser
- Download file 25.3 kB
-
https://huggingface.co/Matt300209/eval_venv/resolve/main/venv/lib/python3.10/site-packages/Cython/Utility/Builtins.c
- Command line
-
hf download hf://Matt300209/eval_venv/venv/lib/python3.10/site-packages/Cython/Utility/Builtins.c
-
curl -L -o Builtins.c https://huggingface.co/Matt300209/eval_venv/resolve/main/venv/lib/python3.10/site-packages/Cython/Utility/Builtins.c
25.3 kB
| /* | |
| * 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 //////////////////// | |
| //@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) { | |
| return __Pyx_NewRef(NAMED_CGLOBAL(moddict_cname)); | |
| } | |
| //////////////////// PyExecGlobals.proto //////////////////// | |
| static PyObject* __Pyx_PyExecGlobals(PyObject*); | |
| //////////////////// PyExecGlobals //////////////////// | |
| //@requires: PyExec | |
| static PyObject* __Pyx_PyExecGlobals(PyObject* code) { | |
| return __Pyx_PyExec2(code, NAMED_CGLOBAL(moddict_cname)); | |
| } | |
| //////////////////// PyExec.proto //////////////////// | |
| static PyObject* __Pyx_PyExec3(PyObject*, PyObject*, PyObject*); | |
| static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject*, PyObject*); | |
| //////////////////// PyExec //////////////////// | |
| 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 = NAMED_CGLOBAL(moddict_cname); | |
| } | |
| // In Limited API we just use exec builtin which already has this | |
| else if (unlikely(!PyDict_Check(globals))) { | |
| __Pyx_TypeName globals_type_name = | |
| __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(globals)); | |
| PyErr_Format(PyExc_TypeError, | |
| "exec() arg 2 must be a dict, not " __Pyx_FMT_TYPENAME, | |
| globals_type_name); | |
| __Pyx_DECREF_TypeName(globals_type_name); | |
| goto bad; | |
| } | |
| if (!locals || locals == Py_None) { | |
| locals = globals; | |
| } | |
| if (__Pyx_PyDict_GetItemStr(globals, PYIDENT("__builtins__")) == NULL) { | |
| if (unlikely(PyDict_SetItem(globals, PYIDENT("__builtins__"), PyEval_GetBuiltins()) < 0)) | |
| goto bad; | |
| } | |
| if (PyCode_Check(o)) { | |
| if (unlikely(__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 (unlikely(!s)) goto bad; | |
| o = s; | |
| } else if (unlikely(!PyBytes_Check(o))) { | |
| __Pyx_TypeName o_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(o)); | |
| PyErr_Format(PyExc_TypeError, | |
| "exec: arg 1 must be string, bytes or code object, got " __Pyx_FMT_TYPENAME, | |
| o_type_name); | |
| __Pyx_DECREF_TypeName(o_type_name); | |
| goto bad; | |
| } | |
| code = PyBytes_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; | |
| { | |
| // For the limited API we just defer to the actual builtin | |
| // (after setting up globals and locals) - there's too much we can't do otherwise | |
| PyObject *builtins, *exec, *exec_str; | |
| builtins = PyEval_GetBuiltins(); | |
| if (!builtins) return NULL; | |
| exec_str = PyUnicode_FromStringAndSize("exec", 4); | |
| if (!exec_str) return NULL; | |
| exec = PyObject_GetItem(builtins, exec_str); | |
| Py_DECREF(exec_str); | |
| if (!exec) return NULL; | |
| result = PyObject_CallFunctionObjArgs(exec, o, globals, locals, NULL); | |
| Py_DECREF(exec); | |
| return result; | |
| } | |
| } | |
| //////////////////// GetAttr3.proto //////////////////// | |
| static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); /*proto*/ | |
| //////////////////// GetAttr3 //////////////////// | |
| //@requires: ObjectHandling.c::PyObjectGetAttrStr | |
| //@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; | |
| int res = PyObject_GetOptionalAttr(o, n, &r); | |
| // On failure (res == -1), r is set to NULL. | |
| return (res != 0) ? r : __Pyx_NewRef(d); | |
| if (likely(PyUnicode_Check(n))) { | |
| r = __Pyx_PyObject_GetAttrStrNoError(o, n); | |
| if (unlikely(!r) && likely(!PyErr_Occurred())) { | |
| r = __Pyx_NewRef(d); | |
| } | |
| return r; | |
| } | |
| r = PyObject_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::PyObjectGetAttrStrNoError | |
| static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { | |
| PyObject *r; | |
| if (unlikely(!PyUnicode_Check(n))) { | |
| PyErr_SetString(PyExc_TypeError, | |
| "hasattr(): attribute name must be string"); | |
| return -1; | |
| } | |
| r = __Pyx_PyObject_GetAttrStrNoError(o, n); | |
| if (!r) { | |
| return (unlikely(PyErr_Occurred())) ? -1 : 0; | |
| } else { | |
| Py_DECREF(r); | |
| return 1; | |
| } | |
| } | |
| //////////////////// Intern.proto //////////////////// | |
| static PyObject* __Pyx_Intern(PyObject* s); /* proto */ | |
| //////////////////// Intern //////////////////// | |
| //@requires: ObjectHandling.c::RaiseUnexpectedTypeError | |
| static PyObject* __Pyx_Intern(PyObject* s) { | |
| if (unlikely(!PyUnicode_CheckExact(s))) { | |
| __Pyx_RaiseUnexpectedTypeError("str", s); | |
| return NULL; | |
| } | |
| Py_INCREF(s); | |
| PyUnicode_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(__Pyx_PyLong_IsCompact(n))) { | |
| return PyLong_FromSize_t(__Pyx_PyLong_CompactValueUnsigned(n)); | |
| } | |
| if (likely(Py_SIZE(n) == -1)) { | |
| // digits are unsigned | |
| return PyLong_FromUnsignedLong(__Pyx_PyLong_Digits(n)[0]); | |
| } | |
| { | |
| PyObject *copy = _PyLong_Copy((PyLongObject*)n); | |
| if (likely(copy)) { | |
| // clear the sign bits to set the sign from SIGN_NEGATIVE (2) to positive (0) | |
| ((PyLongObject*)copy)->long_value.lv_tag ^= ((PyLongObject*)copy)->long_value.lv_tag & _PyLong_SIGN_MASK; | |
| // negate the size to swap the sign | |
| __Pyx_SET_SIZE(copy, -Py_SIZE(copy)); | |
| } | |
| return copy; | |
| } | |
| return PyNumber_Negative(n); | |
| } | |
| //////////////////// pow2.proto //////////////////// | |
| //////////////////// divmod_int.proto ////////////////// | |
| const {{RETURN_TYPE}} __Pyx_divmod_ERROR_VALUE_{{CFUNC_SUFFIX}} = {-1, -1}; | |
| static CYTHON_INLINE {{RETURN_TYPE}} __Pyx_divmod_{{CFUNC_SUFFIX}}({{TYPE}} a, {{TYPE}} b); /*proto*/ | |
| //////////////////// divmod_int ////////////////// | |
| static CYTHON_INLINE {{RETURN_TYPE}} __Pyx_divmod_{{CFUNC_SUFFIX}}({{TYPE}} a, {{TYPE}} b) { | |
| // Python and C/C++ use different algorithms in calculating quotients and remainders. | |
| // This results in different answers between Python and C/C++ | |
| // when the dividend is negative and the divisor is positive and vice versa. | |
| {{TYPE}} q, r; | |
| if (unlikely(b == 0)) { | |
| {{if NOGIL}}PyGILState_STATE gilstate = PyGILState_Ensure();{{endif}} | |
| PyErr_SetString(PyExc_ZeroDivisionError, "division by zero"); | |
| {{if NOGIL}}PyGILState_Release(gilstate);{{endif}} | |
| return __Pyx_divmod_ERROR_VALUE_{{CFUNC_SUFFIX}}; | |
| } else if (a == 0) { | |
| q = 0; | |
| r = 0; | |
| } else if ((a < 0) != (b < 0)) { | |
| // see CMath.c :: DivInt and ModInt utility code | |
| q = a / b; | |
| r = a - q * b; | |
| {{TYPE}} adapt_python = ((r != 0) & ((r < 0) ^ (b < 0))); | |
| q -= adapt_python; | |
| r += adapt_python * b; | |
| } | |
| else { | |
| q = a / b; | |
| r = a % b; | |
| } | |
| {{RETURN_TYPE}} c_result = {q, r}; | |
| return c_result; | |
| } | |
| //////////////////// divmod_float.proto ////////////////// | |
| const {{RETURN_TYPE}} __Pyx_divmod_ERROR_VALUE_{{CFUNC_SUFFIX}} = {-1.0, -1.0}; | |
| static CYTHON_INLINE {{RETURN_TYPE}} __Pyx_divmod_{{CFUNC_SUFFIX}}({{TYPE}} a, {{TYPE}} b); /*proto*/ | |
| //////////////////// divmod_float ////////////////// | |
| static CYTHON_INLINE {{RETURN_TYPE}} __Pyx_divmod_{{CFUNC_SUFFIX}}({{TYPE}} a, {{TYPE}} b) { | |
| // Python and C/C++ use different algorithms in calculating quotients and remainders. | |
| // This results in different answers between Python and C/C++ | |
| // when the dividend is negative and the divisor is positive and vice versa. | |
| // Adapted from CPython 3.14: floatobject.c / _float_div_mod() | |
| {{TYPE}} q, r, div; | |
| if (unlikely(b == 0.0)) { | |
| {{if NOGIL}}PyGILState_STATE gilstate = PyGILState_Ensure();{{endif}} | |
| PyErr_SetString(PyExc_ZeroDivisionError, "division by zero"); | |
| {{if NOGIL}}PyGILState_Release(gilstate);{{endif}} | |
| return __Pyx_divmod_ERROR_VALUE_{{CFUNC_SUFFIX}}; | |
| } | |
| r = fmod{{MATH_SUFFIX}}(a, b); | |
| // fmod is typically exact, so a-mod is *mathematically* an | |
| // exact multiple of b. But this is fp arithmetic, and fp | |
| // a - mod is an approximation; the result is that div may | |
| // not be an exact integral value after the division, although | |
| // it will always be very close to one. | |
| div = (a - r) / b; | |
| if (r) { | |
| // ensure the remainder has the same sign as the denominator | |
| if ((b < 0) != (r < 0)) { | |
| r += b; | |
| div -= 1.0; | |
| } | |
| } | |
| else { | |
| // the remainder is zero, and in the presence of signed zeroes | |
| // fmod returns different results across platforms; ensure | |
| // it has the same sign as the denominator. | |
| r = copysign{{MATH_SUFFIX}}(0.0, b); | |
| } | |
| // snap quotient to nearest integral value | |
| if (div) { | |
| q = floor{{MATH_SUFFIX}}(div); | |
| if (div - q > 0.5) { | |
| q += 1.0; | |
| } | |
| } | |
| else { | |
| // div is zero - get the same sign as the true quotient | |
| q = copysign{{MATH_SUFFIX}}(0.0, a / b); /* zero w/ sign of a/b */ | |
| } | |
| {{RETURN_TYPE}} c_result = {q, r}; | |
| return c_result; | |
| } | |
| //////////////////// int_pyucs4.proto //////////////////// | |
| static CYTHON_INLINE int __Pyx_int_from_UCS4(Py_UCS4 uchar); | |
| //////////////////// int_pyucs4 //////////////////// | |
| static int __Pyx_int_from_UCS4(Py_UCS4 uchar) { | |
| // Fast path for ascii digits | |
| if (likely(uchar >= (Py_UCS4)'0' && uchar <= (Py_UCS4)'9')) { | |
| return uchar - (Py_UCS4)'0'; | |
| } | |
| PyObject *u = PyUnicode_FromOrdinal(uchar); | |
| if (unlikely(!u)) return -1; | |
| PyObject *l = PyObject_CallFunctionObjArgs((PyObject*)(&PyLong_Type), u, NULL); | |
| Py_DECREF(u); | |
| if (unlikely(!l)) return -1; | |
| int result = PyLong_AsInt(l); | |
| // just don't handle overflow - it's very difficult to see how we'll get it from | |
| // a single digit. | |
| int result = (int)PyLong_AsLong(l); | |
| Py_DECREF(l); | |
| return result; | |
| int digit = Py_UNICODE_TODECIMAL(uchar); | |
| if (unlikely(digit < 0)) { | |
| PyErr_Format(PyExc_ValueError, | |
| "invalid literal for int() with base 10: '%c'", | |
| (int) uchar); | |
| return -1; | |
| } | |
| return digit; | |
| } | |
| //////////////////// float_pyucs4.proto //////////////////// | |
| static CYTHON_INLINE double __Pyx_double_from_UCS4(Py_UCS4 uchar); | |
| //////////////////// float_pyucs4 //////////////////// | |
| static double __Pyx_double_from_UCS4(Py_UCS4 uchar) { | |
| // fast path for "just an ascii digit" | |
| if (likely(uchar >= (Py_UCS4)'0' && uchar <= (Py_UCS4)'9')) { | |
| return uchar - (Py_UCS4)'0'; | |
| } | |
| PyObject *u = PyUnicode_FromOrdinal(uchar); | |
| if (unlikely(!u)) return -1.0; | |
| PyObject *f = PyFloat_FromString(u); | |
| Py_DECREF(u); | |
| if (unlikely(!f)) return -1.0; | |
| double result = PyFloat_AsDouble(f); | |
| Py_DECREF(f); | |
| return result; | |
| // ...TONUMERIC would initially seem to be a better fit. | |
| // However, that accepts things like the "half" symbol, while | |
| // float(string) rejects those. | |
| double digit = Py_UNICODE_TODECIMAL(uchar); | |
| if (unlikely(digit < 0.0)) { | |
| PyErr_Format(PyExc_ValueError, | |
| "could not convert string to float: '%c'", | |
| (int) uchar); | |
| return -1.0; | |
| } | |
| return digit; | |
| } | |
| //////////////////// 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 = __Pyx_PyBytes_GET_SIZE(c); | |
| if (likely(size == 1)) { | |
| return (unsigned char) PyBytes_AS_STRING(c)[0]; | |
| char *data = PyBytes_AsString(c); | |
| if (unlikely(!data)) return -1; | |
| return (unsigned char) data[0]; | |
| } | |
| else if (unlikely(size < 0)) return -1; | |
| } else if (PyByteArray_Check(c)) { | |
| size = __Pyx_PyByteArray_GET_SIZE(c); | |
| if (likely(size == 1)) { | |
| return (unsigned char) PyByteArray_AS_STRING(c)[0]; | |
| char *data = PyByteArray_AsString(c); | |
| if (unlikely(!data)) return -1; | |
| return (unsigned char) data[0]; | |
| } | |
| else if (unlikely(size < 0)) return -1; | |
| } else { | |
| // FIXME: support character buffers - but CPython doesn't support them either | |
| __Pyx_TypeName c_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(c)); | |
| PyErr_Format(PyExc_TypeError, | |
| "ord() expected string of length 1, but " __Pyx_FMT_TYPENAME " found", | |
| c_type_name); | |
| __Pyx_DECREF_TypeName(c_type_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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "keys", 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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "values", 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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "items", 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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "keys", 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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "values", 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) { | |
| return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
| } | |
| //////////////////// pyfrozenset_new.proto //////////////////// | |
| static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it); | |
| //////////////////// pyfrozenset_new //////////////////// | |
| //@requires: ObjectHandling.c::PyObjectCallNoArg | |
| 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 ((__PYX_LIMITED_VERSION_HEX >= 0x030A0000) | |
| || __Pyx_get_runtime_version() >= 0x030A0000 | |
| ) | |
| return result; | |
| { | |
| Py_ssize_t size = __Pyx_PySet_GET_SIZE(result); | |
| if (likely(size > 0)) | |
| return result; | |
| if (unlikely(size < 0)) { | |
| Py_DECREF(result); | |
| return NULL; | |
| } | |
| } | |
| // empty frozenset is a singleton (on Python <3.10) | |
| // seems wasteful, but CPython does the same | |
| Py_DECREF(result); | |
| } | |
| return __Pyx_PyObject_CallNoArg((PyObject*) &PyFrozenSet_Type); | |
| } | |
| //////////////////// 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)) { | |
| Py_ssize_t size = __Pyx_PySet_GET_SIZE(it); | |
| if (unlikely(size < 0)) return -1; | |
| if (size == 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; | |
| } | |
| ///////////////// memoryview_get_from_buffer.proto //////////////////// | |
| {{py: | |
| out_types = dict( | |
| ndim='int', readonly='int', | |
| len='Py_ssize_t', itemsize='Py_ssize_t') | |
| }} // can't get format like this unfortunately. It's unicode via getattr | |
| {{py: out_type = out_types[name]}} | |
| static {{out_type}} __Pyx_PyMemoryView_Get_{{name}}(PyObject *obj); /* proto */ | |
| ////////////// memoryview_get_from_buffer ///////////////////////// | |
| {{py: | |
| out_types = dict( | |
| ndim='int', readonly='int', | |
| len='Py_ssize_t', itemsize='Py_ssize_t') | |
| }} | |
| {{py: out_type = out_types[name]}} | |
| static {{out_type}} __Pyx_PyMemoryView_Get_{{name}}(PyObject *obj) { | |
| {{out_type}} result; | |
| PyObject *attr = PyObject_GetAttr(obj, PYIDENT("{{name}}")); | |
| if (!attr) { | |
| goto bad; | |
| } | |
| {{if out_type == 'int'}} | |
| // I'm not worrying about overflow here because | |
| // ultimately it comes from a C struct that's an int | |
| result = PyLong_AsLong(attr); | |
| {{elif out_type == 'Py_ssize_t'}} | |
| result = PyLong_AsSsize_t(attr); | |
| {{endif}} | |
| Py_DECREF(attr); | |
| return result; | |
| bad: | |
| Py_XDECREF(attr); | |
| return -1; | |
| } | |
| ////////////// PySliceAccessors.proto ///////////////////////// | |
| // Graal defines it's own accessor functions | |