Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 33246:03440272028c legacy-trunk
SF Patch #1007087: Return new string for single subclass joins (Bug #1001011)
(Patch contributed by Nick Coghlan.)
Now joining string subtypes will always return a string.
Formerly, if there were only one item, it was returned unchanged.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Mon, 23 Aug 2004 23:23:54 +0000 |
| parents | 8607ac2f81c8 |
| children | 10512ceba30c |
line wrap: on
line diff
--- a/Objects/stringobject.c Mon Aug 23 22:42:55 2004 +0000 +++ b/Objects/stringobject.c Mon Aug 23 23:23:54 2004 +0000 @@ -1618,22 +1618,18 @@ } if (seqlen == 1) { item = PySequence_Fast_GET_ITEM(seq, 0); - if (!PyString_Check(item) && !PyUnicode_Check(item)) { - PyErr_Format(PyExc_TypeError, - "sequence item 0: expected string," - " %.80s found", - item->ob_type->tp_name); + if (PyString_CheckExact(item) || PyUnicode_CheckExact(item)) { + Py_INCREF(item); Py_DECREF(seq); - return NULL; + return item; } - Py_INCREF(item); - Py_DECREF(seq); - return item; } - /* There are at least two things to join. Do a pre-pass to figure out - * the total amount of space we'll need (sz), see whether any argument - * is absurd, and defer to the Unicode join if appropriate. + /* There are at least two things to join, or else we have a subclass + * of the builtin types in the sequence. + * Do a pre-pass to figure out the total amount of space we'll + * need (sz), see whether any argument is absurd, and defer to + * the Unicode join if appropriate. */ for (i = 0; i < seqlen; i++) { const size_t old_sz = sz;
