Mercurial > cpython-lru_cache-weakref
diff Objects/setobject.c @ 42482:4dea3b68b013
Change the repr() of frozenset instances (and set subclasses)
from name([e1, e2, ...]) to name({e1, e2, ...}).
This makes more sense now we have the set notation.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 07 Aug 2007 22:44:20 +0000 |
| parents | e7fd327e0c19 |
| children | ce52cd71a8d9 |
line wrap: on
line diff
--- a/Objects/setobject.c Tue Aug 07 22:09:52 2007 +0000 +++ b/Objects/setobject.c Tue Aug 07 22:44:20 2007 +0000 @@ -571,6 +571,8 @@ 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 @@ if (keys == NULL) goto done; - if (Py_Type(so) != &PySet_Type) { - result = PyUnicode_FromFormat("%s(%R)", Py_Type(so)->tp_name, keys); - Py_DECREF(keys); - } - else { - PyObject *listrepr = PyObject_Repr(keys); - Py_ssize_t newsize; + listrepr = PyObject_Repr(keys); + Py_DECREF(keys); + if (listrepr == NULL) { 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); + 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); + 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);
