Skip to content

Commit fe889f3

Browse files
committed
Factor away a redundant clear() function.
1 parent 2772c67 commit fe889f3

1 file changed

Lines changed: 6 additions & 13 deletions

File tree

Objects/setobject.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ set_discard_internal(PySetObject *so, PyObject *key)
384384
return DISCARD_FOUND;
385385
}
386386

387-
static void
387+
static int
388388
set_clear_internal(PySetObject *so)
389389
{
390390
setentry *entry, *table;
@@ -406,7 +406,7 @@ set_clear_internal(PySetObject *so)
406406
/* This is delicate. During the process of clearing the set,
407407
* decrefs can cause the set to mutate. To avoid fatal confusion
408408
* (voice of experience), we have to make the set empty before
409-
* clearing the slots, and never refer to anything via mp->ref while
409+
* clearing the slots, and never refer to anything via so->ref while
410410
* clearing.
411411
*/
412412
fill = so->fill;
@@ -445,6 +445,8 @@ set_clear_internal(PySetObject *so)
445445

446446
if (table_is_malloced)
447447
PyMem_DEL(table);
448+
so->hash = -1;
449+
return 0;
448450
}
449451

450452
/*
@@ -1433,20 +1435,11 @@ static PyObject *
14331435
set_clear(PySetObject *so)
14341436
{
14351437
set_clear_internal(so);
1436-
so->hash = -1;
14371438
Py_RETURN_NONE;
14381439
}
14391440

14401441
PyDoc_STRVAR(clear_doc, "Remove all elements from this set.");
14411442

1442-
static int
1443-
set_tp_clear(PySetObject *so)
1444-
{
1445-
set_clear_internal(so);
1446-
so->hash = -1;
1447-
return 0;
1448-
}
1449-
14501443
static PyObject *
14511444
set_add(PySetObject *so, PyObject *key)
14521445
{
@@ -1727,7 +1720,7 @@ PyTypeObject PySet_Type = {
17271720
Py_TPFLAGS_BASETYPE, /* tp_flags */
17281721
set_doc, /* tp_doc */
17291722
(traverseproc)set_traverse, /* tp_traverse */
1730-
(inquiry)set_tp_clear, /* tp_clear */
1723+
(inquiry)set_clear_internal, /* tp_clear */
17311724
(richcmpfunc)set_richcompare, /* tp_richcompare */
17321725
offsetof(PySetObject, weakreflist), /* tp_weaklistoffset */
17331726
(getiterfunc)set_iter, /* tp_iter */
@@ -1822,7 +1815,7 @@ PyTypeObject PyFrozenSet_Type = {
18221815
Py_TPFLAGS_BASETYPE, /* tp_flags */
18231816
frozenset_doc, /* tp_doc */
18241817
(traverseproc)set_traverse, /* tp_traverse */
1825-
0, /* tp_clear */
1818+
(inquiry)set_clear_internal, /* tp_clear */
18261819
(richcmpfunc)set_richcompare, /* tp_richcompare */
18271820
offsetof(PySetObject, weakreflist), /* tp_weaklistoffset */
18281821
(getiterfunc)set_iter, /* tp_iter */

0 commit comments

Comments
 (0)