|
|
|
@ -612,36 +612,38 @@ SimpleExtendsException(PyExc_BaseException, KeyboardInterrupt, |
|
|
|
static int |
|
|
|
ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds) |
|
|
|
{ |
|
|
|
static char *kwlist[] = {"name", "path", 0}; |
|
|
|
PyObject *empty_tuple; |
|
|
|
PyObject *msg = NULL; |
|
|
|
PyObject *name = NULL; |
|
|
|
PyObject *path = NULL; |
|
|
|
|
|
|
|
/* Macro replacement doesn't allow ## to start the first line of a macro, |
|
|
|
so we move the assignment and NULL check into the if-statement. */ |
|
|
|
#define GET_KWD(kwd) { \ |
|
|
|
kwd = PyDict_GetItemString(kwds, #kwd); \ |
|
|
|
if (kwd) { \ |
|
|
|
Py_INCREF(kwd); \ |
|
|
|
Py_XSETREF(self->kwd, kwd); \ |
|
|
|
if (PyDict_DelItemString(kwds, #kwd)) \ |
|
|
|
return -1; \ |
|
|
|
} \ |
|
|
|
} |
|
|
|
|
|
|
|
if (kwds) { |
|
|
|
GET_KWD(name); |
|
|
|
GET_KWD(path); |
|
|
|
} |
|
|
|
if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1) |
|
|
|
return -1; |
|
|
|
|
|
|
|
if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1) |
|
|
|
empty_tuple = PyTuple_New(0); |
|
|
|
if (!empty_tuple) |
|
|
|
return -1; |
|
|
|
if (PyTuple_GET_SIZE(args) != 1) |
|
|
|
return 0; |
|
|
|
if (!PyArg_UnpackTuple(args, "ImportError", 1, 1, &msg)) |
|
|
|
if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:ImportError", kwlist, |
|
|
|
&name, &path)) { |
|
|
|
Py_DECREF(empty_tuple); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
Py_DECREF(empty_tuple); |
|
|
|
|
|
|
|
Py_INCREF(msg); |
|
|
|
Py_XSETREF(self->msg, msg); |
|
|
|
if (name) { |
|
|
|
Py_INCREF(name); |
|
|
|
Py_XSETREF(self->name, name); |
|
|
|
} |
|
|
|
if (path) { |
|
|
|
Py_INCREF(path); |
|
|
|
Py_XSETREF(self->path, path); |
|
|
|
} |
|
|
|
if (PyTuple_GET_SIZE(args) == 1) { |
|
|
|
msg = PyTuple_GET_ITEM(args, 0); |
|
|
|
Py_INCREF(msg); |
|
|
|
Py_XSETREF(self->msg, msg); |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|