comparison Python/bltinmodule.c @ 83167:504eed5a82a3

Revert a premature patch for issue #14010 (changeset 846bd418aee5).
author Serhiy Storchaka <storchaka@gmail.com>
date Sat, 06 Apr 2013 22:55:12 +0300
parents 846bd418aee5 7b75f0bd9a5e
children cc59c215f19e
comparison
equal deleted inserted replaced
83164:f315fecdfeb8 83167:504eed5a82a3
389 389
390 static void 390 static void
391 filter_dealloc(filterobject *lz) 391 filter_dealloc(filterobject *lz)
392 { 392 {
393 PyObject_GC_UnTrack(lz); 393 PyObject_GC_UnTrack(lz);
394 Py_TRASHCAN_SAFE_BEGIN(lz)
395 Py_XDECREF(lz->func); 394 Py_XDECREF(lz->func);
396 Py_XDECREF(lz->it); 395 Py_XDECREF(lz->it);
397 Py_TYPE(lz)->tp_free(lz); 396 Py_TYPE(lz)->tp_free(lz);
398 Py_TRASHCAN_SAFE_END(lz)
399 } 397 }
400 398
401 static int 399 static int
402 filter_traverse(filterobject *lz, visitproc visit, void *arg) 400 filter_traverse(filterobject *lz, visitproc visit, void *arg)
403 { 401 {
414 long ok; 412 long ok;
415 PyObject *(*iternext)(PyObject *); 413 PyObject *(*iternext)(PyObject *);
416 414
417 iternext = *Py_TYPE(it)->tp_iternext; 415 iternext = *Py_TYPE(it)->tp_iternext;
418 for (;;) { 416 for (;;) {
419 if (Py_EnterRecursiveCall(" while iterating"))
420 return NULL;
421 item = iternext(it); 417 item = iternext(it);
422 Py_LeaveRecursiveCall();
423 if (item == NULL) 418 if (item == NULL)
424 return NULL; 419 return NULL;
425 420
426 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) { 421 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
427 ok = PyObject_IsTrue(item); 422 ok = PyObject_IsTrue(item);
1034 1029
1035 static void 1030 static void
1036 map_dealloc(mapobject *lz) 1031 map_dealloc(mapobject *lz)
1037 { 1032 {
1038 PyObject_GC_UnTrack(lz); 1033 PyObject_GC_UnTrack(lz);
1039 Py_TRASHCAN_SAFE_BEGIN(lz)
1040 Py_XDECREF(lz->iters); 1034 Py_XDECREF(lz->iters);
1041 Py_XDECREF(lz->func); 1035 Py_XDECREF(lz->func);
1042 Py_TYPE(lz)->tp_free(lz); 1036 Py_TYPE(lz)->tp_free(lz);
1043 Py_TRASHCAN_SAFE_END(lz)
1044 } 1037 }
1045 1038
1046 static int 1039 static int
1047 map_traverse(mapobject *lz, visitproc visit, void *arg) 1040 map_traverse(mapobject *lz, visitproc visit, void *arg)
1048 { 1041 {
2225 2218
2226 static void 2219 static void
2227 zip_dealloc(zipobject *lz) 2220 zip_dealloc(zipobject *lz)
2228 { 2221 {
2229 PyObject_GC_UnTrack(lz); 2222 PyObject_GC_UnTrack(lz);
2230 Py_TRASHCAN_SAFE_BEGIN(lz)
2231 Py_XDECREF(lz->ittuple); 2223 Py_XDECREF(lz->ittuple);
2232 Py_XDECREF(lz->result); 2224 Py_XDECREF(lz->result);
2233 Py_TYPE(lz)->tp_free(lz); 2225 Py_TYPE(lz)->tp_free(lz);
2234 Py_TRASHCAN_SAFE_END(lz)
2235 } 2226 }
2236 2227
2237 static int 2228 static int
2238 zip_traverse(zipobject *lz, visitproc visit, void *arg) 2229 zip_traverse(zipobject *lz, visitproc visit, void *arg)
2239 { 2230 {
2252 PyObject *item; 2243 PyObject *item;
2253 PyObject *olditem; 2244 PyObject *olditem;
2254 2245
2255 if (tuplesize == 0) 2246 if (tuplesize == 0)
2256 return NULL; 2247 return NULL;
2257 if (Py_EnterRecursiveCall(" while iterating"))
2258 return NULL;
2259 if (Py_REFCNT(result) == 1) { 2248 if (Py_REFCNT(result) == 1) {
2260 Py_INCREF(result); 2249 Py_INCREF(result);
2261 for (i=0 ; i < tuplesize ; i++) { 2250 for (i=0 ; i < tuplesize ; i++) {
2262 it = PyTuple_GET_ITEM(lz->ittuple, i); 2251 it = PyTuple_GET_ITEM(lz->ittuple, i);
2263 item = (*Py_TYPE(it)->tp_iternext)(it); 2252 item = (*Py_TYPE(it)->tp_iternext)(it);
2264 if (item == NULL) 2253 if (item == NULL) {
2265 goto error; 2254 Py_DECREF(result);
2255 return NULL;
2256 }
2266 olditem = PyTuple_GET_ITEM(result, i); 2257 olditem = PyTuple_GET_ITEM(result, i);
2267 PyTuple_SET_ITEM(result, i, item); 2258 PyTuple_SET_ITEM(result, i, item);
2268 Py_DECREF(olditem); 2259 Py_DECREF(olditem);
2269 } 2260 }
2270 } else { 2261 } else {
2271 result = PyTuple_New(tuplesize); 2262 result = PyTuple_New(tuplesize);
2272 if (result == NULL) 2263 if (result == NULL)
2273 goto error; 2264 return NULL;
2274 for (i=0 ; i < tuplesize ; i++) { 2265 for (i=0 ; i < tuplesize ; i++) {
2275 it = PyTuple_GET_ITEM(lz->ittuple, i); 2266 it = PyTuple_GET_ITEM(lz->ittuple, i);
2276 item = (*Py_TYPE(it)->tp_iternext)(it); 2267 item = (*Py_TYPE(it)->tp_iternext)(it);
2277 if (item == NULL) 2268 if (item == NULL) {
2278 goto error; 2269 Py_DECREF(result);
2270 return NULL;
2271 }
2279 PyTuple_SET_ITEM(result, i, item); 2272 PyTuple_SET_ITEM(result, i, item);
2280 } 2273 }
2281 } 2274 }
2282 Py_LeaveRecursiveCall();
2283 return result; 2275 return result;
2284 error:
2285 Py_XDECREF(result);
2286 Py_LeaveRecursiveCall();
2287 return NULL;
2288 } 2276 }
2289 2277
2290 static PyObject * 2278 static PyObject *
2291 zip_reduce(zipobject *lz) 2279 zip_reduce(zipobject *lz)
2292 { 2280 {