summaryrefslogtreecommitdiff
path: root/Objects
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-10-06 12:32:37 +0200
committerVictor Stinner <victor.stinner@haypocalc.com>2011-10-06 12:32:37 +0200
commit825a6fb4dfa4c3dd75df7d9eb0bca7071ea313d3 (patch)
tree52157f5b2e860c63800a25d11704ea03abdb3f9e /Objects
parent77d0baf05fda19b0fa590f6cf1cdd3d1f6e985df (diff)
downloadcpython-825a6fb4dfa4c3dd75df7d9eb0bca7071ea313d3.tar.gz
Fix my last change on PyUnicode_Join(): don't process separator if len==1
Diffstat (limited to 'Objects')
-rw-r--r--Objects/unicodeobject.c60
1 files changed, 32 insertions, 28 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 3a0f468751..72007d9b32 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -9145,37 +9145,41 @@ PyUnicode_Join(PyObject *separator, PyObject *seq)
/* If singleton sequence with an exact Unicode, return that. */
items = PySequence_Fast_ITEMS(fseq);
- if (seqlen == 1 && PyUnicode_CheckExact(items[0])) {
- res = items[0];
- Py_INCREF(res);
- Py_DECREF(fseq);
- return res;
- }
-
- /* Set up sep and seplen */
- if (separator == NULL) {
- /* fall back to a blank space separator */
- sep = PyUnicode_FromOrdinal(' ');
- if (!sep)
- goto onError;
- maxchar = 32;
+ if (seqlen == 1) {
+ if (PyUnicode_CheckExact(items[0])) {
+ res = items[0];
+ Py_INCREF(res);
+ Py_DECREF(fseq);
+ return res;
+ }
+ sep = NULL;
}
else {
- if (!PyUnicode_Check(separator)) {
- PyErr_Format(PyExc_TypeError,
- "separator: expected str instance,"
- " %.80s found",
- Py_TYPE(separator)->tp_name);
- goto onError;
+ /* Set up sep and seplen */
+ if (separator == NULL) {
+ /* fall back to a blank space separator */
+ sep = PyUnicode_FromOrdinal(' ');
+ if (!sep)
+ goto onError;
+ maxchar = 32;
+ }
+ else {
+ if (!PyUnicode_Check(separator)) {
+ PyErr_Format(PyExc_TypeError,
+ "separator: expected str instance,"
+ " %.80s found",
+ Py_TYPE(separator)->tp_name);
+ goto onError;
+ }
+ if (PyUnicode_READY(separator))
+ goto onError;
+ sep = separator;
+ seplen = PyUnicode_GET_LENGTH(separator);
+ maxchar = PyUnicode_MAX_CHAR_VALUE(separator);
+ /* inc refcount to keep this code path symmetric with the
+ above case of a blank separator */
+ Py_INCREF(sep);
}
- if (PyUnicode_READY(separator))
- goto onError;
- sep = separator;
- seplen = PyUnicode_GET_LENGTH(separator);
- maxchar = PyUnicode_MAX_CHAR_VALUE(separator);
- /* inc refcount to keep this code path symmetric with the
- above case of a blank separator */
- Py_INCREF(sep);
}
/* There are at least two things to join, or else we have a subclass