diff options
author | Georg Brandl <georg@python.org> | 2006-08-28 19:37:11 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2006-08-28 19:37:11 (GMT) |
commit | c4996ba794d9438be8e472ad5f6c3c55fbf751e8 (patch) | |
tree | cc1017f4d5a8f12da19566dc6a00e4b6728d9106 | |
parent | b3fa66fe30c66adbbd54588f390c4d332285880d (diff) | |
download | cpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.zip cpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.tar.gz cpython-c4996ba794d9438be8e472ad5f6c3c55fbf751e8.tar.bz2 |
Fix str() and repr() of empty sets.
-rw-r--r-- | Lib/test/test_set.py | 2 | ||||
-rw-r--r-- | Objects/setobject.c | 19 |
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; |