mirror of
https://github.com/python/cpython.git
synced 2026-04-04 11:00:58 +00:00
GH-127705: Use _PyStackRefs in the default build. (GH-127875)
This commit is contained in:
parent
7cc99a54b7
commit
2bef8ea8ea
21 changed files with 688 additions and 254 deletions
|
|
@ -136,34 +136,37 @@ PyFloat_FromDouble(double fval)
|
|||
|
||||
#ifdef Py_GIL_DISABLED
|
||||
|
||||
PyObject *_PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
|
||||
_PyStackRef _PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
|
||||
{
|
||||
PyStackRef_CLOSE(left);
|
||||
PyStackRef_CLOSE(right);
|
||||
return PyFloat_FromDouble(value);
|
||||
PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
return PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(value));
|
||||
}
|
||||
|
||||
#else // Py_GIL_DISABLED
|
||||
|
||||
PyObject *_PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
|
||||
_PyStackRef _PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value)
|
||||
{
|
||||
PyObject *left_o = PyStackRef_AsPyObjectSteal(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectSteal(right);
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
|
||||
if (Py_REFCNT(left_o) == 1) {
|
||||
((PyFloatObject *)left_o)->ob_fval = value;
|
||||
_Py_DECREF_SPECIALIZED(right_o, _PyFloat_ExactDealloc);
|
||||
return left_o;
|
||||
PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
return left;
|
||||
}
|
||||
else if (Py_REFCNT(right_o) == 1) {
|
||||
((PyFloatObject *)right_o)->ob_fval = value;
|
||||
_Py_DECREF_NO_DEALLOC(left_o);
|
||||
return right_o;
|
||||
PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
return right;
|
||||
}
|
||||
else {
|
||||
PyObject *result = PyFloat_FromDouble(value);
|
||||
_Py_DECREF_NO_DEALLOC(left_o);
|
||||
_Py_DECREF_NO_DEALLOC(right_o);
|
||||
return result;
|
||||
PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc);
|
||||
PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc);
|
||||
if (result == NULL) {
|
||||
return PyStackRef_NULL;
|
||||
}
|
||||
return PyStackRef_FromPyObjectStealMortal(result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2540,6 +2540,9 @@ _Py_SetImmortalUntracked(PyObject *op)
|
|||
op->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
|
||||
op->ob_ref_shared = 0;
|
||||
_Py_atomic_or_uint8(&op->ob_gc_bits, _PyGC_BITS_DEFERRED);
|
||||
#elif SIZEOF_VOID_P > 4
|
||||
op->ob_flags = _Py_IMMORTAL_FLAGS;
|
||||
op->ob_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
|
||||
#else
|
||||
op->ob_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue