[Python-checkins] python/dist/src/Objects setobject.c,1.30,1.31

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Tue Nov 9 08:25:33 CET 2004


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28891/Objects

Modified Files:
	setobject.c 
Log Message:
SF 1062353:  set pickling problems

Support automatic pickling of dictionaries in instance of set subclasses.



Index: setobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/setobject.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- setobject.c	28 Sep 2004 01:51:34 -0000	1.30
+++ setobject.c	9 Nov 2004 07:25:28 -0000	1.31
@@ -844,7 +844,7 @@
 static PyObject *
 set_reduce(PySetObject *so)
 {
-	PyObject *keys=NULL, *args=NULL, *result=NULL;
+	PyObject *keys=NULL, *args=NULL, *result=NULL, *dict=NULL;
 
 	keys = PyDict_Keys(so->data);
 	if (keys == NULL)
@@ -852,10 +852,17 @@
 	args = PyTuple_Pack(1, keys);
 	if (args == NULL)
 		goto done;
-	result = PyTuple_Pack(2, so->ob_type, args);
+	dict = PyObject_GetAttrString((PyObject *)so, "__dict__");
+	if (dict == NULL) {
+		PyErr_Clear();
+		dict = Py_None;
+		Py_INCREF(dict);
+	}
+	result = PyTuple_Pack(3, so->ob_type, args, dict);
 done:
 	Py_XDECREF(args);
 	Py_XDECREF(keys);
+	Py_XDECREF(dict);
 	return result;
 }
 



More information about the Python-checkins mailing list