summaryrefslogtreecommitdiffstats
path: root/Objects/object.c
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2008-06-11 18:37:52 (GMT)
committerGeorg Brandl <georg@python.org>2008-06-11 18:37:52 (GMT)
commit559e5d7f4d1155e95fb6f925c927a263f9196935 (patch)
tree4688423e81e9ffed7a5b2c87c50b55419e8e885a /Objects/object.c
parentea6d58d9d3033436b52e84960b9571525a4f5412 (diff)
downloadcpython-559e5d7f4d1155e95fb6f925c927a263f9196935.zip
cpython-559e5d7f4d1155e95fb6f925c927a263f9196935.tar.gz
cpython-559e5d7f4d1155e95fb6f925c927a263f9196935.tar.bz2
#2630: Implement PEP 3138.
The repr() of a string now contains printable Unicode characters unescaped. The new ascii() builtin can be used to get a repr() with only ASCII characters in it. PEP and patch were written by Atsuo Ishimoto.
Diffstat (limited to 'Objects/object.c')
-rw-r--r--Objects/object.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 46cfdfe..85bb850 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -425,6 +425,33 @@ PyObject_Str(PyObject *v)
return res;
}
+PyObject *
+PyObject_ASCII(PyObject *v)
+{
+ PyObject *repr, *ascii, *res;
+
+ repr = PyObject_Repr(v);
+ if (repr == NULL)
+ return NULL;
+
+ /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */
+ ascii = PyUnicode_EncodeASCII(
+ PyUnicode_AS_UNICODE(repr),
+ PyUnicode_GET_SIZE(repr),
+ "backslashreplace");
+
+ Py_DECREF(repr);
+ if (ascii == NULL)
+ return NULL;
+
+ res = PyUnicode_DecodeASCII(
+ PyBytes_AS_STRING(ascii),
+ PyBytes_GET_SIZE(ascii),
+ NULL);
+
+ Py_DECREF(ascii);
+ return res;
+}
/* The new comparison philosophy is: we completely separate three-way
comparison from rich comparison. That is, PyObject_Compare() and