GH-125323: Convert DECREF_INPUTS_AND_REUSE_FLOAT into a function that takes PyStackRefs. (GH-125439)

This commit is contained in:
Mark Shannon 2024-10-14 14:18:57 +01:00 committed by GitHub
parent 67f6e08147
commit 06ca33020e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 69 additions and 44 deletions

View file

@ -134,6 +134,41 @@ PyFloat_FromDouble(double fval)
return (PyObject *) op;
}
#ifdef Py_GIL_DISABLED
PyObject *_PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
{
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
return PyFloat_FromDouble(value);
}
#else // Py_GIL_DISABLED
PyObject *_PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
{
PyObject *left_o = PyStackRef_AsPyObjectSteal(left);
PyObject *right_o = PyStackRef_AsPyObjectSteal(right);
if (Py_REFCNT(left_o) == 1) {
((PyFloatObject *)left_o)->ob_fval = value;
_Py_DECREF_SPECIALIZED(right_o, _PyFloat_ExactDealloc);
return left_o;
}
else if (Py_REFCNT(right_o) == 1) {
((PyFloatObject *)right_o)->ob_fval = value;
_Py_DECREF_NO_DEALLOC(left_o);
return right_o;
}
else {
PyObject *result = PyFloat_FromDouble(value);
_Py_DECREF_NO_DEALLOC(left_o);
_Py_DECREF_NO_DEALLOC(right_o);
return result;
}
}
#endif // Py_GIL_DISABLED
static PyObject *
float_from_string_inner(const char *s, Py_ssize_t len, void *obj)
{