Ticket #574: 574-markup-join-iter.patch
| File 574-markup-join-iter.patch, 1.5 KB (added by rblank, 10 years ago) |
|---|
-
genshi/_speedups.c
242 242 Markup_join(PyObject *self, PyObject *args, PyObject *kwds) 243 243 { 244 244 static char *kwlist[] = {"seq", "escape_quotes", 0}; 245 PyObject *seq = NULL, *seq2, * tmp, *tmp2;245 PyObject *seq = NULL, *seq2, *it, *tmp, *tmp2; 246 246 char quotes = 1; 247 Py_ssize_t n;248 int i;249 247 250 248 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|b", kwlist, &seq, "es)) { 251 249 return NULL; 252 250 } 253 if (!PySequence_Check(seq)) { 251 it = PyObject_GetIter(seq); 252 if (it == NULL) 254 253 return NULL; 255 } 256 n = PySequence_Size(seq); 257 if (n < 0) { 258 return NULL; 259 } 260 seq2 = PyTuple_New(n); 254 seq2 = PyList_New(0); 261 255 if (seq2 == NULL) { 256 Py_DECREF(it); 262 257 return NULL; 263 258 } 264 for (i = 0; i < n; i++) { 265 tmp = PySequence_GetItem(seq, i); 266 if (tmp == NULL) { 267 Py_DECREF(seq2); 268 return NULL; 269 } 259 while (tmp = PyIter_Next(it)) { 270 260 tmp2 = escape(tmp, quotes); 271 261 if (tmp2 == NULL) { 272 262 Py_DECREF(seq2); 263 Py_DECREF(it); 273 264 return NULL; 274 265 } 275 Py Tuple_SET_ITEM(seq2, i, tmp2);266 PyList_Append(seq2, tmp2); 276 267 Py_DECREF(tmp); 277 268 } 269 Py_DECREF(it); 270 if (PyErr_Occurred()) { 271 Py_DECREF(seq2); 272 return NULL; 273 } 278 274 tmp = PyUnicode_Join(self, seq2); 279 275 Py_DECREF(seq2); 280 276 if (tmp == NULL)
