]> granicus.if.org Git - python/commitdiff
Remove bogus DECREF of self.
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 15 May 2006 09:22:27 +0000 (09:22 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 15 May 2006 09:22:27 +0000 (09:22 +0000)
Change __str__() functions to METH_O.
Change WindowsError__str__ to use PyTuple_Pack.

Python/exceptions.c

index 3f949edfab05235f9654c8b613eb50f6a1e767b7..7cf1580504f23e854e4d12a2156f4a324b391388 100644 (file)
@@ -223,12 +223,9 @@ BaseException__init__(PyObject *self, PyObject *args)
 
 
 static PyObject *
-BaseException__str__(PyObject *self, PyObject *args)
+BaseException__str__(PyObject *_self, PyObject *self)
 {
-    PyObject *out;
-
-    if (!PyArg_ParseTuple(args, "O:__str__", &self))
-        return NULL;
+    PyObject *out, *args;
 
     args = PyObject_GetAttrString(self, "args");
     if (!args)
@@ -376,7 +373,7 @@ BaseException_methods[] = {
     /* methods for the BaseException class */
     {"__getitem__", BaseException__getitem__, METH_VARARGS},
     {"__repr__", BaseException__repr__, METH_VARARGS},
-    {"__str__",     BaseException__str__, METH_VARARGS},
+    {"__str__",     BaseException__str__, METH_O},
 #ifdef Py_USING_UNICODE
     {"__unicode__",  BaseException__unicode__, METH_VARARGS},
 #endif /* Py_USING_UNICODE */
@@ -617,17 +614,13 @@ EnvironmentError__init__(PyObject *self, PyObject *args)
 
 
 static PyObject *
-EnvironmentError__str__(PyObject *self, PyObject *args)
+EnvironmentError__str__(PyObject *originalself, PyObject *self)
 {
-    PyObject *originalself = self;
     PyObject *filename;
     PyObject *serrno;
     PyObject *strerror;
     PyObject *rtnval = NULL;
 
-    if (!PyArg_ParseTuple(args, "O:__str__", &self))
-       return NULL;
-
     filename = PyObject_GetAttrString(self, "filename");
     serrno = PyObject_GetAttrString(self, "errno");
     strerror = PyObject_GetAttrString(self, "strerror");
@@ -687,7 +680,7 @@ EnvironmentError__str__(PyObject *self, PyObject *args)
         * but there is no StandardError__str__() function; we happen to
         * know that's just a pass through to BaseException__str__().
         */
-       rtnval = BaseException__str__(originalself, args);
+       rtnval = BaseException__str__(originalself, self);
 
   finally:
     Py_XDECREF(filename);
@@ -700,7 +693,7 @@ EnvironmentError__str__(PyObject *self, PyObject *args)
 static
 PyMethodDef EnvironmentError_methods[] = {
     {"__init__", EnvironmentError__init__, METH_VARARGS},
-    {"__str__",  EnvironmentError__str__, METH_VARARGS},
+    {"__str__",  EnvironmentError__str__, METH_O},
     {NULL, NULL}
 };
 
@@ -746,23 +739,21 @@ WindowsError__init__(PyObject *self, PyObject *args)
 failed:
        /* Could not set errno. */
        Py_XDECREF(o_errcode);
-       Py_DECREF(self);
        Py_DECREF(result);
        return NULL;
 }
 
 static PyObject *
-WindowsError__str__(PyObject *self, PyObject *args)
+WindowsError__str__(PyObject *originalself, PyObject *self)
 {
-    PyObject *originalself = self;
     PyObject *filename;
     PyObject *serrno;
     PyObject *strerror;
+    PyObject *repr = NULL;
+    PyObject *fmt = NULL;
+    PyObject *tuple = NULL;
     PyObject *rtnval = NULL;
 
-    if (!PyArg_ParseTuple(args, "O:__str__", &self))
-       return NULL;
-
     filename = PyObject_GetAttrString(self, "filename");
     serrno = PyObject_GetAttrString(self, "winerror");
     strerror = PyObject_GetAttrString(self, "strerror");
@@ -770,64 +761,46 @@ WindowsError__str__(PyObject *self, PyObject *args)
        goto finally;
 
     if (filename != Py_None) {
-       PyObject *fmt = PyString_FromString("[Error %s] %s: %s");
-       PyObject *repr = PyObject_Repr(filename);
-       PyObject *tuple = PyTuple_New(3);
-
-       if (!fmt || !repr || !tuple) {
-           Py_XDECREF(fmt);
-           Py_XDECREF(repr);
-           Py_XDECREF(tuple);
+       fmt = PyString_FromString("[Error %s] %s: %s");
+       repr = PyObject_Repr(filename);
+       if (!fmt || !repr)
            goto finally;
-       }
+       
 
-       PyTuple_SET_ITEM(tuple, 0, serrno);
-       PyTuple_SET_ITEM(tuple, 1, strerror);
-       PyTuple_SET_ITEM(tuple, 2, repr);
+       tuple = PyTuple_Pack(3, serrno, strerror, repr);
+       if (!tuple)
+           goto finally;
 
        rtnval = PyString_Format(fmt, tuple);
-
-       Py_DECREF(fmt);
-       Py_DECREF(tuple);
-       /* already freed because tuple owned only reference */
-       serrno = NULL;
-       strerror = NULL;
     }
     else if (PyObject_IsTrue(serrno) && PyObject_IsTrue(strerror)) {
-       PyObject *fmt = PyString_FromString("[Error %s] %s");
-       PyObject *tuple = PyTuple_New(2);
-
-       if (!fmt || !tuple) {
-           Py_XDECREF(fmt);
-           Py_XDECREF(tuple);
+       fmt = PyString_FromString("[Error %s] %s");
+       if (!fmt)
            goto finally;
-       }
 
-       PyTuple_SET_ITEM(tuple, 0, serrno);
-       PyTuple_SET_ITEM(tuple, 1, strerror);
+       tuple = PyTuple_Pack(2, serrno, strerror);
+       if (!tuple)
+           goto finally;
 
        rtnval = PyString_Format(fmt, tuple);
-
-       Py_DECREF(fmt);
-       Py_DECREF(tuple);
-       /* already freed because tuple owned only reference */
-       serrno = NULL;
-       strerror = NULL;
     }
     else
-       rtnval = EnvironmentError__str__(originalself, args);
+       rtnval = EnvironmentError__str__(originalself, self);
 
   finally:
     Py_XDECREF(filename);
     Py_XDECREF(serrno);
     Py_XDECREF(strerror);
+    Py_XDECREF(repr);
+    Py_XDECREF(fmt);
+    Py_XDECREF(tuple);
     return rtnval;
 }
 
 static
 PyMethodDef WindowsError_methods[] = {
     {"__init__", WindowsError__init__, METH_VARARGS},
-    {"__str__", WindowsError__str__, METH_VARARGS},
+    {"__str__", WindowsError__str__, METH_O},
     {NULL, NULL}
 };
 #endif /* MS_WINDOWS */
@@ -972,15 +945,12 @@ my_basename(char *name)
 
 
 static PyObject *
-SyntaxError__str__(PyObject *self, PyObject *args)
+SyntaxError__str__(PyObject *_self, PyObject *self)
 {
     PyObject *msg;
     PyObject *str;
     PyObject *filename, *lineno, *result;
 
-    if (!PyArg_ParseTuple(args, "O:__str__", &self))
-       return NULL;
-
     if (!(msg = PyObject_GetAttrString(self, "msg")))
        return NULL;
 
@@ -1045,20 +1015,17 @@ SyntaxError__str__(PyObject *self, PyObject *args)
 
 static PyMethodDef SyntaxError_methods[] = {
     {"__init__", SyntaxError__init__, METH_VARARGS},
-    {"__str__",  SyntaxError__str__, METH_VARARGS},
+    {"__str__",  SyntaxError__str__, METH_O},
     {NULL, NULL}
 };
 
 
 static PyObject *
-KeyError__str__(PyObject *self, PyObject *args)
+KeyError__str__(PyObject *_self, PyObject *self)
 {
     PyObject *argsattr;
     PyObject *result;
 
-    if (!PyArg_ParseTuple(args, "O:__str__", &self))
-       return NULL;
-
     argsattr = PyObject_GetAttrString(self, "args");
     if (!argsattr)
            return NULL;
@@ -1077,14 +1044,14 @@ KeyError__str__(PyObject *self, PyObject *args)
        result = PyObject_Repr(key);
     }
     else
-       result = BaseException__str__(self, args);
+       result = BaseException__str__(_self, self);
 
     Py_DECREF(argsattr);
     return result;
 }
 
 static PyMethodDef KeyError_methods[] = {
-    {"__str__",  KeyError__str__, METH_VARARGS},
+    {"__str__",  KeyError__str__, METH_O},
     {NULL, NULL}
 };