]> granicus.if.org Git - python/commitdiff
Change the repr() of frozenset instances (and set subclasses)
authorGuido van Rossum <guido@python.org>
Tue, 7 Aug 2007 22:44:20 +0000 (22:44 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 7 Aug 2007 22:44:20 +0000 (22:44 +0000)
from name([e1, e2, ...]) to name({e1, e2, ...}).
This makes more sense now we have the set notation.

Lib/test/test_set.py
Objects/setobject.c

index ee570f0b4ce4ec57bb17fa28a6ab8c5357288b9f..df72fb2da634c61844c6515b93cf61217d98df93 100644 (file)
@@ -265,7 +265,7 @@ class TestJointOps(unittest.TestCase):
             self.assertEqual(repr(s), '{set(...)}')
         else:
             name = repr(s).partition('(')[0]    # strip class name
-            self.assertEqual(repr(s), '%s([%s(...)])' % (name, name))
+            self.assertEqual(repr(s), '%s({%s(...)})' % (name, name))
 
     def test_cyclical_print(self):
         w = ReprWrapper()
index 14d9155481a31fa76df3144f9772867917d8f21f..2cc1743167badf7289b73f23176c29779c24a9cf 100644 (file)
@@ -571,6 +571,8 @@ set_repr(PySetObject *so)
        PyObject *keys, *result=NULL;
        Py_UNICODE *u;
        int status = Py_ReprEnter((PyObject*)so);
+       PyObject *listrepr;
+       Py_ssize_t newsize;
 
        if (status != 0) {
                if (status < 0)
@@ -588,30 +590,30 @@ set_repr(PySetObject *so)
        if (keys == NULL)
                goto done;
 
-       if (Py_Type(so) != &PySet_Type) {
-               result = PyUnicode_FromFormat("%s(%R)", Py_Type(so)->tp_name, keys);
+       listrepr = PyObject_Repr(keys);
+       Py_DECREF(keys);
+       if (listrepr == NULL) {
                Py_DECREF(keys);
+               goto done;
        }
-       else {
-               PyObject *listrepr = PyObject_Repr(keys);
-               Py_ssize_t newsize;
-               Py_DECREF(keys);
-               if (listrepr == NULL) {
-                       Py_DECREF(keys);
-                       goto done;
-               }
-               newsize = PyUnicode_GET_SIZE(listrepr);
-               result = PyUnicode_FromUnicode(NULL, newsize);
-               if (result) {
-                       u = PyUnicode_AS_UNICODE(result);
-                       *u++ = '{';
-                       /* Omit the brackets from the listrepr */
-                       Py_UNICODE_COPY(u, PyUnicode_AS_UNICODE(listrepr)+1,
-                                          PyUnicode_GET_SIZE(listrepr)-2);
-                       u += newsize-2;
-                       *u++ = '}';
-               }
-               Py_DECREF(listrepr);
+       newsize = PyUnicode_GET_SIZE(listrepr);
+       result = PyUnicode_FromUnicode(NULL, newsize);
+       if (result) {
+               u = PyUnicode_AS_UNICODE(result);
+               *u++ = '{';
+               /* Omit the brackets from the listrepr */
+               Py_UNICODE_COPY(u, PyUnicode_AS_UNICODE(listrepr)+1,
+                                  PyUnicode_GET_SIZE(listrepr)-2);
+               u += newsize-2;
+               *u++ = '}';
+       }
+       Py_DECREF(listrepr);
+       if (Py_Type(so) != &PySet_Type) {
+               PyObject *tmp = PyUnicode_FromFormat("%s(%U)",
+                                                    Py_Type(so)->tp_name,
+                                                    result);
+               Py_DECREF(result);
+               result = tmp;
        }
 done:
        Py_ReprLeave((PyObject*)so);