gh-112087: Update list.{pop,clear,reverse,remove} to use CS (gh-113764)

This commit is contained in:
Donghee Na 2024-01-09 09:00:55 +09:00 committed by GitHub
parent 10d3f04aec
commit a023bc252d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 9 deletions

View File

@ -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]*/

View File

@ -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;