diff options
-rw-r--r-- | Include/pyerrors.h | 6 | ||||
-rw-r--r-- | Objects/setobject.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/Include/pyerrors.h b/Include/pyerrors.h index f18e579..94a5290 100644 --- a/Include/pyerrors.h +++ b/Include/pyerrors.h @@ -15,6 +15,12 @@ PyAPI_FUNC(void) PyErr_Clear(void); PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **); PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *); +#ifdef Py_DEBUG +#define _PyErr_OCCURRED() PyErr_Occurred() +#else +#define _PyErr_OCCURRED() (_PyThreadState_Current->curexc_type) +#endif + /* Error testing and normalization */ PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *); PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *); diff --git a/Objects/setobject.c b/Objects/setobject.c index 9952ec0..c46df83 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -66,7 +66,7 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) if (entry->hash == hash) { /* error can't have been checked yet */ checked_error = 1; - if (PyErr_Occurred()) { + if (_PyErr_OCCURRED()) { restore_error = 1; PyErr_Fetch(&err_type, &err_value, &err_tb); } @@ -104,7 +104,7 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) if (entry->hash == hash && entry->key != dummy) { if (!checked_error) { checked_error = 1; - if (PyErr_Occurred()) { + if (_PyErr_OCCURRED()) { restore_error = 1; PyErr_Fetch(&err_type, &err_value, &err_tb); @@ -720,7 +720,10 @@ make_new_set(PyTypeObject *type, PyObject *iterable) if (so == NULL) return NULL; - EMPTY_TO_MINSIZE(so); + /* tp_alloc has already zeroed the structure */ + assert(so->table == NULL && so->fill == 0 && so->used == 0); + so->table = so->smalltable; + so->mask = PySet_MINSIZE - 1; so->lookup = set_lookkey_string; so->hash = -1; so->weakreflist = NULL; |