diff options
author | Neil Schemenauer <nascheme@enme.ucalgary.ca> | 2005-08-12 17:34:58 (GMT) |
---|---|---|
committer | Neil Schemenauer <nascheme@enme.ucalgary.ca> | 2005-08-12 17:34:58 (GMT) |
commit | cf52c0784364c09818ffd3fcaabffec667dba01d (patch) | |
tree | 6376fa09a2c4ba2ff6db8a3a3d6445d55fba5824 /Objects/stringobject.c | |
parent | ba7d95e21588c649a262e30103a33a237cc142a0 (diff) | |
download | cpython-cf52c0784364c09818ffd3fcaabffec667dba01d.zip cpython-cf52c0784364c09818ffd3fcaabffec667dba01d.tar.gz cpython-cf52c0784364c09818ffd3fcaabffec667dba01d.tar.bz2 |
Change the %s format specifier for str objects so that it returns a
unicode instance if the argument is not an instance of basestring and
calling __str__ on the argument returns a unicode instance.
Diffstat (limited to 'Objects/stringobject.c')
-rw-r--r-- | Objects/stringobject.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 8a9dc52..9bcae0f 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3853,7 +3853,6 @@ formatchar(char *buf, size_t buflen, PyObject *v) return 1; } - /* fmt%(v1,v2,...) is roughly equivalent to sprintf(fmt, v1, v2, ...) FORMATBUFLEN is the length of the buffer in which the floats, ints, & @@ -4079,7 +4078,9 @@ PyString_Format(PyObject *format, PyObject *args) break; case 's': #ifdef Py_USING_UNICODE - if (PyUnicode_Check(v)) { + temp = _PyObject_Str(v); + if (temp != NULL && PyUnicode_Check(temp)) { + Py_DECREF(temp); fmt = fmt_start; argidx = argidx_start; goto unicode; @@ -4087,16 +4088,11 @@ PyString_Format(PyObject *format, PyObject *args) #endif /* Fall through */ case 'r': - if (c == 's') - temp = PyObject_Str(v); - else + if (c == 'r') temp = PyObject_Repr(v); if (temp == NULL) goto error; if (!PyString_Check(temp)) { - /* XXX Note: this should never happen, - since PyObject_Repr() and - PyObject_Str() assure this */ PyErr_SetString(PyExc_TypeError, "%s argument has non-string str()"); Py_DECREF(temp); |