Skip to content

Commit 99220fa

Browse files
committed
* Removed checked_error flag which no longer provides any benefit.
* Have issubset() control its own loop instead of using set_next_internal().
1 parent 5ba0cbe commit 99220fa

1 file changed

Lines changed: 12 additions & 15 deletions

File tree

Objects/setobject.c

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
4949
setentry *table = so->table;
5050
register setentry *entry;
5151
register int restore_error;
52-
register int checked_error;
5352
register int cmp;
5453
PyObject *err_type, *err_value, *err_tb;
5554
PyObject *startkey;
@@ -59,13 +58,11 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
5958
if (entry->key == NULL || entry->key == key)
6059
return entry;
6160

62-
restore_error = checked_error = 0;
61+
restore_error = 0;
6362
if (entry->key == dummy)
6463
freeslot = entry;
6564
else {
6665
if (entry->hash == hash) {
67-
/* error can't have been checked yet */
68-
checked_error = 1;
6966
if (_PyErr_OCCURRED()) {
7067
restore_error = 1;
7168
PyErr_Fetch(&err_type, &err_value, &err_tb);
@@ -102,13 +99,10 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
10299
if (entry->key == key)
103100
break;
104101
if (entry->hash == hash && entry->key != dummy) {
105-
if (!checked_error) {
106-
checked_error = 1;
107-
if (_PyErr_OCCURRED()) {
108-
restore_error = 1;
109-
PyErr_Fetch(&err_type, &err_value,
110-
&err_tb);
111-
}
102+
if (_PyErr_OCCURRED()) {
103+
restore_error = 1;
104+
PyErr_Fetch(&err_type, &err_value,
105+
&err_tb);
112106
}
113107
startkey = entry->key;
114108
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
@@ -1267,8 +1261,8 @@ static PyObject *
12671261
set_issubset(PySetObject *so, PyObject *other)
12681262
{
12691263
PyObject *tmp, *result;
1270-
PyObject *key;
1271-
int pos = 0;
1264+
register setentry *entry;
1265+
register int i;
12721266

12731267
if (!PyAnySet_Check(other)) {
12741268
tmp = make_new_set(&PySet_Type, other);
@@ -1281,8 +1275,11 @@ set_issubset(PySetObject *so, PyObject *other)
12811275
if (set_len((PyObject *)so) > set_len(other))
12821276
Py_RETURN_FALSE;
12831277

1284-
while (set_next_internal(so, &pos, &key)) {
1285-
if (!set_contains_internal((PySetObject *)other, key))
1278+
entry = &so->table[0];
1279+
for (i=so->used ; i ; entry++, i--) {
1280+
while (entry->key == NULL || entry->key==dummy)
1281+
entry++;
1282+
if (!set_contains_internal((PySetObject *)other, entry->key))
12861283
Py_RETURN_FALSE;
12871284
}
12881285
Py_RETURN_TRUE;

0 commit comments

Comments
 (0)