Kaydet (Commit) 99220fab authored tarafından Raymond Hettinger's avatar Raymond Hettinger

* Removed checked_error flag which no longer provides any benefit.

* Have issubset() control its own loop instead of using set_next_internal().
üst 5ba0cbe3
...@@ -49,7 +49,6 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) ...@@ -49,7 +49,6 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
setentry *table = so->table; setentry *table = so->table;
register setentry *entry; register setentry *entry;
register int restore_error; register int restore_error;
register int checked_error;
register int cmp; register int cmp;
PyObject *err_type, *err_value, *err_tb; PyObject *err_type, *err_value, *err_tb;
PyObject *startkey; PyObject *startkey;
...@@ -59,13 +58,11 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) ...@@ -59,13 +58,11 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
if (entry->key == NULL || entry->key == key) if (entry->key == NULL || entry->key == key)
return entry; return entry;
restore_error = checked_error = 0; restore_error = 0;
if (entry->key == dummy) if (entry->key == dummy)
freeslot = entry; freeslot = entry;
else { else {
if (entry->hash == hash) { if (entry->hash == hash) {
/* error can't have been checked yet */
checked_error = 1;
if (_PyErr_OCCURRED()) { if (_PyErr_OCCURRED()) {
restore_error = 1; restore_error = 1;
PyErr_Fetch(&err_type, &err_value, &err_tb); PyErr_Fetch(&err_type, &err_value, &err_tb);
...@@ -102,13 +99,10 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) ...@@ -102,13 +99,10 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
if (entry->key == key) if (entry->key == key)
break; break;
if (entry->hash == hash && entry->key != dummy) { if (entry->hash == hash && entry->key != dummy) {
if (!checked_error) { if (_PyErr_OCCURRED()) {
checked_error = 1; restore_error = 1;
if (_PyErr_OCCURRED()) { PyErr_Fetch(&err_type, &err_value,
restore_error = 1; &err_tb);
PyErr_Fetch(&err_type, &err_value,
&err_tb);
}
} }
startkey = entry->key; startkey = entry->key;
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
...@@ -1267,8 +1261,8 @@ static PyObject * ...@@ -1267,8 +1261,8 @@ static PyObject *
set_issubset(PySetObject *so, PyObject *other) set_issubset(PySetObject *so, PyObject *other)
{ {
PyObject *tmp, *result; PyObject *tmp, *result;
PyObject *key; register setentry *entry;
int pos = 0; register int i;
if (!PyAnySet_Check(other)) { if (!PyAnySet_Check(other)) {
tmp = make_new_set(&PySet_Type, other); tmp = make_new_set(&PySet_Type, other);
...@@ -1281,8 +1275,11 @@ set_issubset(PySetObject *so, PyObject *other) ...@@ -1281,8 +1275,11 @@ set_issubset(PySetObject *so, PyObject *other)
if (set_len((PyObject *)so) > set_len(other)) if (set_len((PyObject *)so) > set_len(other))
Py_RETURN_FALSE; Py_RETURN_FALSE;
while (set_next_internal(so, &pos, &key)) { entry = &so->table[0];
if (!set_contains_internal((PySetObject *)other, key)) for (i=so->used ; i ; entry++, i--) {
while (entry->key == NULL || entry->key==dummy)
entry++;
if (!set_contains_internal((PySetObject *)other, entry->key))
Py_RETURN_FALSE; Py_RETURN_FALSE;
} }
Py_RETURN_TRUE; Py_RETURN_TRUE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment