Mercurial > cpython-lru_cache-weakref
diff Python/marshal.c @ 45036:1e583eb71b3f legacy-trunk
Let marshal built-up sets and frozensets one element at a time (without creating an intermediate tuple).
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Mon, 28 Jan 2008 21:34:30 +0000 |
| parents | 3124cc5b973f |
| children | 7a6a80e84a8a |
line wrap: on
line diff
--- a/Python/marshal.c Mon Jan 28 20:34:33 2008 +0000 +++ b/Python/marshal.c Mon Jan 28 21:34:30 2008 +0000 @@ -860,7 +860,7 @@ 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 @@ v = NULL; break; } - PyTuple_SET_ITEM(v, (int)i, v2); - } - if (v == NULL) { - retval = NULL; - break; + if (PySet_Add(v, v2) == -1) { + Py_DECREF(v); + Py_DECREF(v2); + v = 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:
