diff options
author | Raymond Hettinger <python@rcn.com> | 2008-01-26 08:37:28 +0000 |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2008-01-26 08:37:28 +0000 |
commit | b423f02aa5650e8226fe9c90efbe7c2e204aae67 (patch) | |
tree | 872109776d890f346618043d21c7b599724d01fb /Python/marshal.c | |
parent | 08b50eb3d30fc24bd7d32efbf74d328a97ab3b47 (diff) | |
download | cpython-git-b423f02aa5650e8226fe9c90efbe7c2e204aae67.tar.gz |
Let marshal build-up sets and frozensets one element at a time.
Saves the unnecessary creation of a tuple as intermediate container.
Diffstat (limited to 'Python/marshal.c')
-rw-r--r-- | Python/marshal.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/Python/marshal.c b/Python/marshal.c index 0c611b618c..1b88ff964d 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: |