Add future_builtins.ascii().
diff --git a/Doc/library/future_builtins.rst b/Doc/library/future_builtins.rst
index d25aff7..6a1fdab 100644
--- a/Doc/library/future_builtins.rst
+++ b/Doc/library/future_builtins.rst
@@ -28,6 +28,14 @@
 
 Available builtins are:
 
+.. function:: ascii(object)
+
+   Returns the same as :func:`repr`.  In Python 3, :func:`repr` will return
+   printable Unicode characters unescaped, while :func:`ascii` will always
+   backslash-escape them.  Using :func:`future_builtins.ascii` instead of
+   :func:`repr` in 2.6 code makes it clear that you need a pure ASCII return
+   value.
+
 .. function:: filter(function, iterable)
 
    Works like :func:`itertools.ifilter`.
diff --git a/Misc/NEWS b/Misc/NEWS
index 06b8b45..02c6cff 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@
 Core and Builtins
 -----------------
 
+- Add future_builtins.ascii().
+
 - Several set methods now accept multiple arguments:  update(), union(),
   intersection(), intersection_update(), difference(), and difference_update().
 
diff --git a/Modules/future_builtins.c b/Modules/future_builtins.c
index 5baaa60..4c840fb 100644
--- a/Modules/future_builtins.c
+++ b/Modules/future_builtins.c
@@ -45,11 +45,25 @@
 Return the octal representation of an integer or long integer.");
 
 
+static PyObject *
+builtin_ascii(PyObject *self, PyObject *v)
+{
+	return PyObject_Repr(v);
+}
+
+PyDoc_STRVAR(ascii_doc,
+"ascii(object) -> string\n\
+\n\
+Return the same as repr().  In Python 3.x, the repr() result will\n\
+contain printable characters unescaped, while the ascii() result\n\
+will have such characters backslash-escaped.");
+
 /* List of functions exported by this module */
 
 static PyMethodDef module_functions[] = {
  	{"hex",		builtin_hex,        METH_O, hex_doc},
  	{"oct",		builtin_oct,        METH_O, oct_doc},
+	{"ascii",	builtin_ascii,      METH_O, ascii_doc},
 	{NULL,		NULL}	/* Sentinel */
 };