summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2006-08-28 19:37:11 (GMT)
committerGeorg Brandl <georg@python.org>2006-08-28 19:37:11 (GMT)
commitc4996ba794d9438be8e472ad5f6c3c55fbf751e8 (patch)
treecc1017f4d5a8f12da19566dc6a00e4b6728d9106
parentb3fa66fe30c66adbbd54588f390c4d332285880d (diff)
downloadcpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.zip
cpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.tar.gz
cpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.tar.bz2
Fix str() and repr() of empty sets.
-rw-r--r--Lib/test/test_set.py2
-rw-r--r--Objects/setobject.c19
2 files changed, 16 insertions, 5 deletions
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index 556e390..03621a6 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -631,7 +631,7 @@ class TestBasicOpsEmpty(TestBasicOps):
self.set = set(self.values)
self.dup = set(self.values)
self.length = 0
- self.repr = "{}"
+ self.repr = "set()"
#------------------------------------------------------------------------------
diff --git a/Objects/setobject.c b/Objects/setobject.c
index b4b58b7..05549e6 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -529,10 +529,17 @@ set_tp_print(PySetObject *so, FILE *fp, int flags)
Py_ssize_t pos=0;
char *emit = ""; /* No separator emitted on first pass */
char *separator = ", ";
+ int literalform = 0;
- if (so->ob_type == &PySet_Type)
+ if (!so->used) {
+ fprintf(fp, "%s()", so->ob_type->tp_name);
+ return 0;
+ }
+
+ if (so->ob_type == &PySet_Type) {
+ literalform = 1;
fprintf(fp, "{");
- else
+ } else
fprintf(fp, "%s([", so->ob_type->tp_name);
while (set_next(so, &pos, &entry)) {
fputs(emit, fp);
@@ -540,7 +547,7 @@ set_tp_print(PySetObject *so, FILE *fp, int flags)
if (PyObject_Print(entry->key, fp, 0) != 0)
return -1;
}
- if (so->ob_type == &PySet_Type)
+ if (literalform)
fputs("}", fp);
else
fputs("])", fp);
@@ -552,6 +559,10 @@ set_repr(PySetObject *so)
{
PyObject *keys, *result, *listrepr;
+ /* shortcut for the empty set */
+ if (!so->used)
+ return PyString_FromFormat("%s()", so->ob_type->tp_name);
+
keys = PySequence_List((PyObject *)so);
if (keys == NULL)
return NULL;
@@ -567,7 +578,7 @@ set_repr(PySetObject *so)
result = PyString_FromFormat("{%s}", s);
} else {
result = PyString_FromFormat("%s(%s)", so->ob_type->tp_name,
- PyString_AS_STRING(listrepr));
+ PyString_AS_STRING(listrepr));
}
Py_DECREF(listrepr);
return result;