Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 438e02d

Browse files
committed
* Refactor set.__contains__()
* Use Py_RETURN_NONE everywhere. * Fix-up the firstpass check for the tp_print slot.
1 parent 0deab62 commit 438e02d

1 file changed

Lines changed: 10 additions & 21 deletions

File tree

Objects/setobject.c

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -158,18 +158,9 @@ set_contains(PySetObject *so, PyObject *key)
158158
static PyObject *
159159
set_direct_contains(PySetObject *so, PyObject *key)
160160
{
161-
PyObject *tmp;
162161
long result;
163162

164-
result = PyDict_Contains(so->data, key);
165-
if (result == -1 && PyAnySet_Check(key)) {
166-
PyErr_Clear();
167-
tmp = frozenset_dict_wrapper(((PySetObject *)(key))->data);
168-
if (tmp == NULL)
169-
return NULL;
170-
result = PyDict_Contains(so->data, tmp);
171-
Py_DECREF(tmp);
172-
}
163+
result = set_contains(so, key);
173164
if (result == -1)
174165
return NULL;
175166
return PyBool_FromLong(result);
@@ -655,8 +646,8 @@ frozenset_hash(PyObject *self)
655646
PySetObject *so = (PySetObject *)self;
656647
PyObject *key, *value;
657648
int pos = 0;
658-
659649
long hash = 0;
650+
660651
if (so->hash != -1)
661652
return so->hash;
662653

@@ -728,11 +719,13 @@ static int
728719
set_tp_print(PySetObject *so, FILE *fp, int flags)
729720
{
730721
PyObject *key, *value;
731-
int pos = 0;
722+
int pos=0, firstpass=1;
732723

733724
fprintf(fp, "%s([", so->ob_type->tp_name);
734725
while (PyDict_Next(so->data, &pos, &key, &value)) {
735-
if (pos)
726+
if (firstpass)
727+
firstpass = 0;
728+
else
736729
fprintf(fp, ", ");
737730
if (PyObject_Print(key, fp, 0) != 0)
738731
return -1;
@@ -746,8 +739,7 @@ set_clear(PySetObject *so)
746739
{
747740
PyDict_Clear(so->data);
748741
so->hash = -1;
749-
Py_INCREF(Py_None);
750-
return Py_None;
742+
Py_RETURN_NONE;
751743
}
752744

753745
PyDoc_STRVAR(clear_doc, "Remove all elements from this set.");
@@ -765,8 +757,7 @@ set_add(PySetObject *so, PyObject *item)
765757
{
766758
if (PyDict_SetItem(so->data, item, Py_True) == -1)
767759
return NULL;
768-
Py_INCREF(Py_None);
769-
return Py_None;
760+
Py_RETURN_NONE;
770761
}
771762

772763
PyDoc_STRVAR(add_doc,
@@ -790,8 +781,7 @@ set_remove(PySetObject *so, PyObject *item)
790781

791782
if (PyDict_DelItem(so->data, item) == -1)
792783
return NULL;
793-
Py_INCREF(Py_None);
794-
return Py_None;
784+
Py_RETURN_NONE;
795785
}
796786

797787
PyDoc_STRVAR(remove_doc,
@@ -818,8 +808,7 @@ set_discard(PySetObject *so, PyObject *item)
818808
return NULL;
819809
PyErr_Clear();
820810
}
821-
Py_INCREF(Py_None);
822-
return Py_None;
811+
Py_RETURN_NONE;
823812
}
824813

825814
PyDoc_STRVAR(discard_doc,

0 commit comments

Comments
 (0)