@@ -1382,14 +1382,7 @@ set_isdisjoint(PySetObject *so, PyObject *other)
13821382 return NULL ;
13831383
13841384 while ((key = PyIter_Next (it )) != NULL ) {
1385- Py_hash_t hash = PyObject_Hash (key );
1386-
1387- if (hash == -1 ) {
1388- Py_DECREF (key );
1389- Py_DECREF (it );
1390- return NULL ;
1391- }
1392- rv = set_contains_entry (so , key , hash );
1385+ rv = set_contains_key (so , key );
13931386 Py_DECREF (key );
13941387 if (rv < 0 ) {
13951388 Py_DECREF (it );
@@ -1773,17 +1766,31 @@ PyDoc_STRVAR(issubset_doc, "Report whether another set contains this set.");
17731766static PyObject *
17741767set_issuperset (PySetObject * so , PyObject * other )
17751768{
1776- PyObject * tmp , * result ;
1769+ if (PyAnySet_Check (other )) {
1770+ return set_issubset ((PySetObject * )other , (PyObject * )so );
1771+ }
17771772
1778- if (!PyAnySet_Check (other )) {
1779- tmp = make_new_set (& PySet_Type , other );
1780- if (tmp == NULL )
1773+ PyObject * key , * it = PyObject_GetIter (other );
1774+ if (it == NULL ) {
1775+ return NULL ;
1776+ }
1777+ while ((key = PyIter_Next (it )) != NULL ) {
1778+ int rv = set_contains_key (so , key );
1779+ Py_DECREF (key );
1780+ if (rv < 0 ) {
1781+ Py_DECREF (it );
17811782 return NULL ;
1782- result = set_issuperset (so , tmp );
1783- Py_DECREF (tmp );
1784- return result ;
1783+ }
1784+ if (!rv ) {
1785+ Py_DECREF (it );
1786+ Py_RETURN_FALSE ;
1787+ }
17851788 }
1786- return set_issubset ((PySetObject * )other , (PyObject * )so );
1789+ Py_DECREF (it );
1790+ if (PyErr_Occurred ()) {
1791+ return NULL ;
1792+ }
1793+ Py_RETURN_TRUE ;
17871794}
17881795
17891796PyDoc_STRVAR (issuperset_doc , "Report whether this set contains another set." );
0 commit comments