]> granicus.if.org Git - python/commitdiff
Let marshal built-up sets and frozensets one element at a time (without creating...
authorRaymond Hettinger <python@rcn.com>
Mon, 28 Jan 2008 21:34:30 +0000 (21:34 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 28 Jan 2008 21:34:30 +0000 (21:34 +0000)
Python/marshal.c

index 0c611b618c2ba4a463c42476bfa820e9f81b184d..1b88ff964d1edc8134c0b4223f87823ba53fabb8 100644 (file)
@@ -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: