From 52716c94be3fa7b7df0160bc1cf5b04ec99f9c72 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 28 Jan 2008 21:34:30 +0000 Subject: Let marshal built-up sets and frozensets one element at a time (without creating an intermediate tuple). --- Python/marshal.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/Python/marshal.c b/Python/marshal.c index 0c611b6..1b88ff9 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -860,7 +860,7 @@ r_object(RFILE *p) retval = NULL; break; } - v = PyTuple_New((int)n); + v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); if (v == NULL) { retval = NULL; break; @@ -875,18 +875,14 @@ r_object(RFILE *p) v = NULL; break; } - PyTuple_SET_ITEM(v, (int)i, v2); + if (PySet_Add(v, v2) == -1) { + Py_DECREF(v); + Py_DECREF(v2); + v = NULL; + break; + } } - if (v == NULL) { - retval = NULL; - break; - } - if (type == TYPE_SET) - v3 = PySet_New(v); - else - v3 = PyFrozenSet_New(v); - Py_DECREF(v); - retval = v3; + retval = (v == NULL) ? NULL : v; break; case TYPE_CODE: -- cgit v0.12