[Python-checkins] r60398 - python/trunk/Python/marshal.c

raymond.hettinger python-checkins at python.org
Mon Jan 28 22:34:30 CET 2008


Author: raymond.hettinger
Date: Mon Jan 28 22:34:30 2008
New Revision: 60398

Modified:
   python/trunk/Python/marshal.c
Log:
Let marshal built-up sets and frozensets one element at a time (without creating an intermediate tuple).

Modified: python/trunk/Python/marshal.c
==============================================================================
--- python/trunk/Python/marshal.c	(original)
+++ python/trunk/Python/marshal.c	Mon Jan 28 22:34:30 2008
@@ -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 (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:


More information about the Python-checkins mailing list