diff options
Diffstat (limited to 'Objects/exceptions.c')
| -rw-r--r-- | Objects/exceptions.c | 40 | 
1 files changed, 22 insertions, 18 deletions
| diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 981ead2172..f63f06a145 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -59,15 +59,11 @@ BaseException_new(PyTypeObject *type, PyObject *args, PyObject *kwds)  static int  BaseException_init(PyBaseExceptionObject *self, PyObject *args, PyObject *kwds)  { -    PyObject *tmp; -      if (!_PyArg_NoKeywords(Py_TYPE(self)->tp_name, kwds))          return -1; -    tmp = self->args; -    self->args = args; -    Py_INCREF(self->args); -    Py_XDECREF(tmp); +    Py_INCREF(args); +    Py_XSETREF(self->args, args);      return 0;  } @@ -234,7 +230,7 @@ BaseException_set_tb(PyBaseExceptionObject *self, PyObject *tb)          return -1;      } -    Py_XINCREF(tb); +    Py_INCREF(tb);      Py_XSETREF(self->traceback, tb);      return 0;  } @@ -328,11 +324,10 @@ PyException_GetCause(PyObject *self) {  /* Steals a reference to cause */  void -PyException_SetCause(PyObject *self, PyObject *cause) { -    PyObject *old_cause = ((PyBaseExceptionObject *)self)->cause; -    ((PyBaseExceptionObject *)self)->cause = cause; +PyException_SetCause(PyObject *self, PyObject *cause) +{      ((PyBaseExceptionObject *)self)->suppress_context = 1; -    Py_XDECREF(old_cause); +    Py_XSETREF(((PyBaseExceptionObject *)self)->cause, cause);  }  PyObject * @@ -344,10 +339,9 @@ PyException_GetContext(PyObject *self) {  /* Steals a reference to context */  void -PyException_SetContext(PyObject *self, PyObject *context) { -    PyObject *old_context = ((PyBaseExceptionObject *)self)->context; -    ((PyBaseExceptionObject *)self)->context = context; -    Py_XDECREF(old_context); +PyException_SetContext(PyObject *self, PyObject *context) +{ +    Py_XSETREF(((PyBaseExceptionObject *)self)->context, context);  } @@ -714,6 +708,13 @@ ComplexExtendsException(PyExc_Exception, ImportError,                          "module.");  /* + *    ModuleNotFoundError extends ImportError + */ + +MiddlingExtendsException(PyExc_ImportError, ModuleNotFoundError, ImportError, +                         "Module not found."); + +/*   *    OSError extends Exception   */ @@ -993,7 +994,7 @@ OSError_init(PyOSErrorObject *self, PyObject *args, PyObject *kwds)      return 0;  error: -    Py_XDECREF(args); +    Py_DECREF(args);      return -1;  } @@ -1073,8 +1074,7 @@ OSError_str(PyOSErrorObject *self)      }      if (self->myerrno && self->strerror)          return PyUnicode_FromFormat("[Errno %S] %S", -                                    self->myerrno ? self->myerrno: Py_None, -                                    self->strerror ? self->strerror: Py_None); +                                    self->myerrno, self->strerror);      return BaseException_str((PyBaseExceptionObject *)self);  } @@ -2478,6 +2478,7 @@ _PyExc_Init(PyObject *bltinmod)      PRE_INIT(SystemExit)      PRE_INIT(KeyboardInterrupt)      PRE_INIT(ImportError) +    PRE_INIT(ModuleNotFoundError)      PRE_INIT(OSError)      PRE_INIT(EOFError)      PRE_INIT(RuntimeError) @@ -2550,6 +2551,7 @@ _PyExc_Init(PyObject *bltinmod)      POST_INIT(SystemExit)      POST_INIT(KeyboardInterrupt)      POST_INIT(ImportError) +    POST_INIT(ModuleNotFoundError)      POST_INIT(OSError)      INIT_ALIAS(EnvironmentError, OSError)      INIT_ALIAS(IOError, OSError) @@ -2612,7 +2614,9 @@ _PyExc_Init(PyObject *bltinmod)      ADD_ERRNO(BlockingIOError, EWOULDBLOCK);      POST_INIT(BrokenPipeError);      ADD_ERRNO(BrokenPipeError, EPIPE); +#ifdef ESHUTDOWN      ADD_ERRNO(BrokenPipeError, ESHUTDOWN); +#endif      POST_INIT(ChildProcessError);      ADD_ERRNO(ChildProcessError, ECHILD);      POST_INIT(ConnectionAbortedError); | 
