mirror of https://github.com/python/cpython
gh-112087: Update list.{pop,clear,reverse,remove} to use CS (gh-113764)
This commit is contained in:
parent
10d3f04aec
commit
a023bc252d
|
@ -7,6 +7,7 @@ preserve
|
||||||
# include "pycore_runtime.h" // _Py_ID()
|
# include "pycore_runtime.h" // _Py_ID()
|
||||||
#endif
|
#endif
|
||||||
#include "pycore_abstract.h" // _PyNumber_Index()
|
#include "pycore_abstract.h" // _PyNumber_Index()
|
||||||
|
#include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION()
|
||||||
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
|
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
|
||||||
|
|
||||||
PyDoc_STRVAR(list_insert__doc__,
|
PyDoc_STRVAR(list_insert__doc__,
|
||||||
|
@ -44,7 +45,9 @@ list_insert(PyListObject *self, PyObject *const *args, Py_ssize_t nargs)
|
||||||
index = ival;
|
index = ival;
|
||||||
}
|
}
|
||||||
object = args[1];
|
object = args[1];
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
return_value = list_insert_impl(self, index, object);
|
return_value = list_insert_impl(self, index, object);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
|
@ -65,7 +68,13 @@ py_list_clear_impl(PyListObject *self);
|
||||||
static PyObject *
|
static PyObject *
|
||||||
py_list_clear(PyListObject *self, PyObject *Py_UNUSED(ignored))
|
py_list_clear(PyListObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return py_list_clear_impl(self);
|
PyObject *return_value = NULL;
|
||||||
|
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
return_value = py_list_clear_impl(self);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(list_copy__doc__,
|
PyDoc_STRVAR(list_copy__doc__,
|
||||||
|
@ -143,7 +152,9 @@ list_pop(PyListObject *self, PyObject *const *args, Py_ssize_t nargs)
|
||||||
index = ival;
|
index = ival;
|
||||||
}
|
}
|
||||||
skip_optional:
|
skip_optional:
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
return_value = list_pop_impl(self, index);
|
return_value = list_pop_impl(self, index);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
|
@ -242,7 +253,13 @@ list_reverse_impl(PyListObject *self);
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_reverse(PyListObject *self, PyObject *Py_UNUSED(ignored))
|
list_reverse(PyListObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return list_reverse_impl(self);
|
PyObject *return_value = NULL;
|
||||||
|
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
return_value = list_reverse_impl(self);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(list_index__doc__,
|
PyDoc_STRVAR(list_index__doc__,
|
||||||
|
@ -311,6 +328,21 @@ PyDoc_STRVAR(list_remove__doc__,
|
||||||
#define LIST_REMOVE_METHODDEF \
|
#define LIST_REMOVE_METHODDEF \
|
||||||
{"remove", (PyCFunction)list_remove, METH_O, list_remove__doc__},
|
{"remove", (PyCFunction)list_remove, METH_O, list_remove__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
list_remove_impl(PyListObject *self, PyObject *value);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
list_remove(PyListObject *self, PyObject *value)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
return_value = list_remove_impl(self, value);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(list___init____doc__,
|
PyDoc_STRVAR(list___init____doc__,
|
||||||
"list(iterable=(), /)\n"
|
"list(iterable=(), /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -384,4 +416,4 @@ list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return list___reversed___impl(self);
|
return list___reversed___impl(self);
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=f2d7b63119464ff4 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=3c9f24fd3212b18b input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -798,6 +798,7 @@ list_ass_item(PyObject *aa, Py_ssize_t i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
list.insert
|
list.insert
|
||||||
|
|
||||||
index: Py_ssize_t
|
index: Py_ssize_t
|
||||||
|
@ -809,7 +810,7 @@ Insert object before index.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_insert_impl(PyListObject *self, Py_ssize_t index, PyObject *object)
|
list_insert_impl(PyListObject *self, Py_ssize_t index, PyObject *object)
|
||||||
/*[clinic end generated code: output=7f35e32f60c8cb78 input=858514cf894c7eab]*/
|
/*[clinic end generated code: output=7f35e32f60c8cb78 input=b1987ca998a4ae2d]*/
|
||||||
{
|
{
|
||||||
if (ins1(self, index, object) == 0)
|
if (ins1(self, index, object) == 0)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
@ -817,6 +818,7 @@ list_insert_impl(PyListObject *self, Py_ssize_t index, PyObject *object)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
list.clear as py_list_clear
|
list.clear as py_list_clear
|
||||||
|
|
||||||
Remove all items from list.
|
Remove all items from list.
|
||||||
|
@ -824,7 +826,7 @@ Remove all items from list.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
py_list_clear_impl(PyListObject *self)
|
py_list_clear_impl(PyListObject *self)
|
||||||
/*[clinic end generated code: output=83726743807e3518 input=378711e10f545c53]*/
|
/*[clinic end generated code: output=83726743807e3518 input=e285b7f09051a9ba]*/
|
||||||
{
|
{
|
||||||
list_clear(self);
|
list_clear(self);
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
@ -1062,6 +1064,7 @@ list_inplace_concat(PyObject *_self, PyObject *other)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
list.pop
|
list.pop
|
||||||
|
|
||||||
index: Py_ssize_t = -1
|
index: Py_ssize_t = -1
|
||||||
|
@ -1074,7 +1077,7 @@ Raises IndexError if list is empty or index is out of range.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_pop_impl(PyListObject *self, Py_ssize_t index)
|
list_pop_impl(PyListObject *self, Py_ssize_t index)
|
||||||
/*[clinic end generated code: output=6bd69dcb3f17eca8 input=b83675976f329e6f]*/
|
/*[clinic end generated code: output=6bd69dcb3f17eca8 input=c269141068ae4b8f]*/
|
||||||
{
|
{
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
int status;
|
int status;
|
||||||
|
@ -2593,6 +2596,7 @@ PyList_Sort(PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
list.reverse
|
list.reverse
|
||||||
|
|
||||||
Reverse *IN PLACE*.
|
Reverse *IN PLACE*.
|
||||||
|
@ -2600,7 +2604,7 @@ Reverse *IN PLACE*.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_reverse_impl(PyListObject *self)
|
list_reverse_impl(PyListObject *self)
|
||||||
/*[clinic end generated code: output=482544fc451abea9 input=eefd4c3ae1bc9887]*/
|
/*[clinic end generated code: output=482544fc451abea9 input=04ac8e0c6a66e4d9]*/
|
||||||
{
|
{
|
||||||
if (Py_SIZE(self) > 1)
|
if (Py_SIZE(self) > 1)
|
||||||
reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
|
reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
|
||||||
|
@ -2730,6 +2734,7 @@ list_count(PyListObject *self, PyObject *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
list.remove
|
list.remove
|
||||||
|
|
||||||
value: object
|
value: object
|
||||||
|
@ -2741,8 +2746,8 @@ Raises ValueError if the value is not present.
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_remove(PyListObject *self, PyObject *value)
|
list_remove_impl(PyListObject *self, PyObject *value)
|
||||||
/*[clinic end generated code: output=f087e1951a5e30d1 input=2dc2ba5bb2fb1f82]*/
|
/*[clinic end generated code: output=b9b76a6633b18778 input=26c813dbb95aa93b]*/
|
||||||
{
|
{
|
||||||
Py_ssize_t i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue