summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2007-05-26 15:03:32 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2007-05-26 15:03:32 (GMT)
commitf5bec7c67d5cc05ff1cb91dbc83ead6e0f8e41ec (patch)
tree7a420fbbc7ebeca22d6ae30953059d887d84f229
parent63236cf386574484d9f594af4b464c44c579cf25 (diff)
downloadcpython-f5bec7c67d5cc05ff1cb91dbc83ead6e0f8e41ec.zip
cpython-f5bec7c67d5cc05ff1cb91dbc83ead6e0f8e41ec.tar.gz
cpython-f5bec7c67d5cc05ff1cb91dbc83ead6e0f8e41ec.tar.bz2
Change tp_str implementations of exception classes
to return unicode strings.
-rw-r--r--Objects/exceptions.c258
1 files changed, 35 insertions, 223 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index f7189e2..6cb234b 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -78,21 +78,14 @@ BaseException_traverse(PyBaseExceptionObject *self, visitproc visit, void *arg)
static PyObject *
BaseException_str(PyBaseExceptionObject *self)
{
- PyObject *out;
-
switch (PyTuple_GET_SIZE(self->args)) {
case 0:
- out = PyString_FromString("");
- break;
+ return PyUnicode_FromString("");
case 1:
- out = PyObject_Str(PyTuple_GET_ITEM(self->args, 0));
- break;
+ return PyObject_Unicode(PyTuple_GET_ITEM(self->args, 0));
default:
- out = PyObject_Str(self->args);
- break;
+ return PyObject_Unicode(self->args);
}
-
- return out;
}
static PyObject *
@@ -505,93 +498,17 @@ EnvironmentError_traverse(PyEnvironmentErrorObject *self, visitproc visit,
static PyObject *
EnvironmentError_str(PyEnvironmentErrorObject *self)
{
- PyObject *rtnval = NULL;
-
- if (self->filename) {
- PyObject *fmt;
- PyObject *repr;
- PyObject *tuple;
-
- fmt = PyString_FromString("[Errno %s] %s: %s");
- if (!fmt)
- return NULL;
-
- repr = PyObject_ReprStr8(self->filename);
- if (!repr) {
- Py_DECREF(fmt);
- return NULL;
- }
- tuple = PyTuple_New(3);
- if (!tuple) {
- Py_DECREF(repr);
- Py_DECREF(fmt);
- return NULL;
- }
-
- if (self->myerrno) {
- Py_INCREF(self->myerrno);
- PyTuple_SET_ITEM(tuple, 0, self->myerrno);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 0, Py_None);
- }
- if (self->strerror) {
- Py_INCREF(self->strerror);
- PyTuple_SET_ITEM(tuple, 1, self->strerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 1, Py_None);
- }
-
- PyTuple_SET_ITEM(tuple, 2, repr);
-
- rtnval = PyString_Format(fmt, tuple);
-
- Py_DECREF(fmt);
- Py_DECREF(tuple);
- }
- else if (self->myerrno && self->strerror) {
- PyObject *fmt;
- PyObject *tuple;
-
- fmt = PyString_FromString("[Errno %s] %s");
- if (!fmt)
- return NULL;
-
- tuple = PyTuple_New(2);
- if (!tuple) {
- Py_DECREF(fmt);
- return NULL;
- }
-
- if (self->myerrno) {
- Py_INCREF(self->myerrno);
- PyTuple_SET_ITEM(tuple, 0, self->myerrno);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 0, Py_None);
- }
- if (self->strerror) {
- Py_INCREF(self->strerror);
- PyTuple_SET_ITEM(tuple, 1, self->strerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 1, Py_None);
- }
-
- rtnval = PyString_Format(fmt, tuple);
-
- Py_DECREF(fmt);
- Py_DECREF(tuple);
- }
+ if (self->filename)
+ return PyUnicode_FromFormat("[Errno %S] %S: %R",
+ self->myerrno ? self->myerrno: Py_None,
+ self->strerror ? self->strerror: Py_None,
+ self->filename);
+ else if (self->myerrno && self->strerror)
+ return PyUnicode_FromFormat("[Errno %S] %S",
+ self->myerrno ? self->myerrno: Py_None,
+ self->strerror ? self->strerror: Py_None);
else
- rtnval = BaseException_str((PyBaseExceptionObject *)self);
-
- return rtnval;
+ return BaseException_str((PyBaseExceptionObject *)self);
}
static PyMemberDef EnvironmentError_members[] = {
@@ -736,93 +653,17 @@ WindowsError_init(PyWindowsErrorObject *self, PyObject *args, PyObject *kwds)
static PyObject *
WindowsError_str(PyWindowsErrorObject *self)
{
- PyObject *rtnval = NULL;
-
- if (self->filename) {
- PyObject *fmt;
- PyObject *repr;
- PyObject *tuple;
-
- fmt = PyString_FromString("[Error %s] %s: %s");
- if (!fmt)
- return NULL;
-
- repr = PyObject_ReprStr8(self->filename);
- if (!repr) {
- Py_DECREF(fmt);
- return NULL;
- }
- tuple = PyTuple_New(3);
- if (!tuple) {
- Py_DECREF(repr);
- Py_DECREF(fmt);
- return NULL;
- }
-
- if (self->winerror) {
- Py_INCREF(self->winerror);
- PyTuple_SET_ITEM(tuple, 0, self->winerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 0, Py_None);
- }
- if (self->strerror) {
- Py_INCREF(self->strerror);
- PyTuple_SET_ITEM(tuple, 1, self->strerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 1, Py_None);
- }
-
- PyTuple_SET_ITEM(tuple, 2, repr);
-
- rtnval = PyString_Format(fmt, tuple);
-
- Py_DECREF(fmt);
- Py_DECREF(tuple);
- }
- else if (self->winerror && self->strerror) {
- PyObject *fmt;
- PyObject *tuple;
-
- fmt = PyString_FromString("[Error %s] %s");
- if (!fmt)
- return NULL;
-
- tuple = PyTuple_New(2);
- if (!tuple) {
- Py_DECREF(fmt);
- return NULL;
- }
-
- if (self->winerror) {
- Py_INCREF(self->winerror);
- PyTuple_SET_ITEM(tuple, 0, self->winerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 0, Py_None);
- }
- if (self->strerror) {
- Py_INCREF(self->strerror);
- PyTuple_SET_ITEM(tuple, 1, self->strerror);
- }
- else {
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(tuple, 1, Py_None);
- }
-
- rtnval = PyString_Format(fmt, tuple);
-
- Py_DECREF(fmt);
- Py_DECREF(tuple);
- }
+ if (self->filename)
+ return PyUnicode_FromFormat("[Error %S] %S: %R",
+ self->winerror ? self->winerror: Py_None,
+ self->strerror ? self->strerror: Py_None,
+ self->filename);
+ else if (self->winerror && self->strerror)
+ return PyUnicode_FromFormat("[Error %S] %S",
+ self->winerror ? self->winerror: Py_None,
+ self->strerror ? self->strerror: Py_None);
else
- rtnval = EnvironmentError_str((PyEnvironmentErrorObject *)self);
-
- return rtnval;
+ return EnvironmentError_str((PyEnvironmentErrorObject *)self);
}
static PyMemberDef WindowsError_members[] = {
@@ -998,20 +839,8 @@ my_basename(char *name)
static PyObject *
SyntaxError_str(PySyntaxErrorObject *self)
{
- PyObject *str;
- PyObject *result;
int have_filename = 0;
int have_lineno = 0;
- char *buffer = NULL;
- Py_ssize_t bufsize;
-
- if (self->msg)
- str = PyObject_Str(self->msg);
- else
- str = PyObject_Str(Py_None);
- if (!str) return NULL;
- /* Don't fiddle with non-string return (shouldn't happen anyway) */
- if (!PyString_Check(str)) return str;
/* XXX -- do all the additional formatting with filename and
lineno here */
@@ -1021,38 +850,21 @@ SyntaxError_str(PySyntaxErrorObject *self)
have_lineno = (self->lineno != NULL) && PyInt_CheckExact(self->lineno);
if (!have_filename && !have_lineno)
- return str;
-
- bufsize = PyString_GET_SIZE(str) + 64;
- if (have_filename)
- bufsize += PyString_GET_SIZE(self->filename);
-
- buffer = PyMem_MALLOC(bufsize);
- if (buffer == NULL)
- return str;
+ return PyObject_Unicode(self->msg ? self->msg : Py_None);
if (have_filename && have_lineno)
- PyOS_snprintf(buffer, bufsize, "%s (%s, line %ld)",
- PyString_AS_STRING(str),
- my_basename(PyString_AS_STRING(self->filename)),
- PyInt_AsLong(self->lineno));
+ return PyUnicode_FromFormat("%S (%s, line %ld)",
+ self->msg ? self->msg : Py_None,
+ my_basename(PyString_AS_STRING(self->filename)),
+ PyInt_AsLong(self->lineno));
else if (have_filename)
- PyOS_snprintf(buffer, bufsize, "%s (%s)",
- PyString_AS_STRING(str),
- my_basename(PyString_AS_STRING(self->filename)));
+ return PyUnicode_FromFormat("%S (%s)",
+ self->msg ? self->msg : Py_None,
+ my_basename(PyString_AS_STRING(self->filename)));
else /* only have_lineno */
- PyOS_snprintf(buffer, bufsize, "%s (line %ld)",
- PyString_AS_STRING(str),
- PyInt_AsLong(self->lineno));
-
- result = PyString_FromString(buffer);
- PyMem_FREE(buffer);
-
- if (result == NULL)
- result = str;
- else
- Py_DECREF(str);
- return result;
+ return PyUnicode_FromFormat("%S (line %ld)",
+ self->msg ? self->msg : Py_None,
+ PyInt_AsLong(self->lineno));
}
static PyMemberDef SyntaxError_members[] = {
@@ -1121,7 +933,7 @@ KeyError_str(PyBaseExceptionObject *self)
If args is anything else, use the default BaseException__str__().
*/
if (PyTuple_GET_SIZE(self->args) == 1) {
- return PyObject_ReprStr8(PyTuple_GET_ITEM(self->args, 0));
+ return PyObject_Repr(PyTuple_GET_ITEM(self->args, 0));
}
return BaseException_str(self);
}