@@ -384,7 +384,7 @@ set_discard_internal(PySetObject *so, PyObject *key)
384384 return DISCARD_FOUND ;
385385}
386386
387- static void
387+ static int
388388set_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 *
14331435set_clear (PySetObject * so )
14341436{
14351437 set_clear_internal (so );
1436- so -> hash = -1 ;
14371438 Py_RETURN_NONE ;
14381439}
14391440
14401441PyDoc_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-
14501443static PyObject *
14511444set_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