summaryrefslogtreecommitdiffstats
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3dc6a00..6b14003 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -265,6 +265,38 @@ PyDoc_STRVAR(any_doc,
\n\
Return True if bool(x) is True for any x in the iterable.");
+static PyObject *
+builtin_ascii(PyObject *self, PyObject *v)
+{
+ PyObject *repr, *bytes, *ascii;
+ repr = PyObject_Repr(v);
+ if (!repr)
+ return NULL;
+
+ bytes = PyUnicode_EncodeASCII(
+ PyUnicode_AS_UNICODE(repr),
+ PyUnicode_GET_SIZE(repr),
+ "backslashreplace");
+
+ Py_DECREF(repr);
+ if (bytes == NULL)
+ return NULL;
+
+ ascii = PyUnicode_FromEncodedObject(bytes,
+ "ASCII", NULL);
+ Py_DECREF(bytes);
+ if (ascii == NULL)
+ return NULL;
+
+ return ascii;
+}
+
+PyDoc_STRVAR(ascii_doc,
+"ascii(object) -> string\n\
+\n\
+Return the canonical string representation of the object as repr(),\n\
+but non-ASCII characters in the string are hex-escaped");
+
static PyObject *
builtin_bin(PyObject *self, PyObject *v)
@@ -2188,6 +2220,7 @@ static PyMethodDef builtin_methods[] = {
{"abs", builtin_abs, METH_O, abs_doc},
{"all", builtin_all, METH_O, all_doc},
{"any", builtin_any, METH_O, any_doc},
+ {"ascii", builtin_ascii, METH_O, ascii_doc},
{"bin", builtin_bin, METH_O, bin_doc},
{"chr", builtin_chr, METH_VARARGS, chr_doc},
{"cmp", builtin_cmp, METH_VARARGS, cmp_doc},