From 5ba0cbe39221ff8985ce5a4702a3b01a17ae3248 Mon Sep 17 00:00:00 2001
From: Raymond Hettinger <python@rcn.com>
Date: Sat, 6 Aug 2005 18:31:24 +0000
Subject: * set_new() doesn't need to zero the structure a second time after
 tp_alloc   has already done the job. * Use a macro form of PyErr_Occurred()
 inside the set_lookkey() function.

---
 Include/pyerrors.h  | 6 ++++++
 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;
-- 
cgit v0.12

