diff options
-rw-r--r-- | Doc/api/exceptions.tex | 3 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Python/errors.c | 13 |
3 files changed, 15 insertions, 4 deletions
diff --git a/Doc/api/exceptions.tex b/Doc/api/exceptions.tex index ed419a8..e1bfb38 100644 --- a/Doc/api/exceptions.tex +++ b/Doc/api/exceptions.tex @@ -341,7 +341,8 @@ for each thread. The \member{__module__} attribute of the new class is set to the first part (up to the last dot) of the \var{name} argument, and the class name is set to the last part (after the last dot). The - \var{base} argument can be used to specify an alternate base class. + \var{base} argument can be used to specify alternate base classes; + it can either be only one class or a tuple of classes. The \var{dict} argument can be used to specify a dictionary of class variables and methods. \end{cfuncdesc} @@ -12,6 +12,9 @@ What's New in Python 2.5 alpha 3? Core and builtins ----------------- +- PyErr_NewException now accepts a tuple of base classes as its + "base" parameter. + - Patch #876206: function call speedup by retaining allocated frame objects. diff --git a/Python/errors.c b/Python/errors.c index 8327f53..baf52ff 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -527,6 +527,7 @@ PyErr_Format(PyObject *exception, const char *format, ...) } + PyObject * PyErr_NewException(char *name, PyObject *base, PyObject *dict) { @@ -559,9 +560,15 @@ PyErr_NewException(char *name, PyObject *base, PyObject *dict) classname = PyString_FromString(dot+1); if (classname == NULL) goto failure; - bases = PyTuple_Pack(1, base); - if (bases == NULL) - goto failure; + if (PyTuple_Check(base)) { + bases = base; + /* INCREF as we create a new ref in the else branch */ + Py_INCREF(bases); + } else { + bases = PyTuple_Pack(1, base); + if (bases == NULL) + goto failure; + } result = PyClass_New(bases, dict, classname); failure: Py_XDECREF(bases); |