At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
__builtin__.dir(). Moved the guts from bltinmodule.c to object.c.
diff --git a/Doc/api/api.tex b/Doc/api/api.tex
index 8836cdf..a185509 100644
--- a/Doc/api/api.tex
+++ b/Doc/api/api.tex
@@ -1720,6 +1720,16 @@
descriptor value. Returns \code{-1} on failure.
\end{cfuncdesc}
+\begin{cfuncdesc}{PyObject*}{PyObject_Dir}{PyObject *o}
+This is equivalent to the Python expression \samp{dir(\var{o})},
+returning a (possibly empty) list of strings appropriate for the
+object argument, or \NULL{} in case of error.
+If the argument is \NULL{}, this is like the Python \samp{dir()},
+returning the names of the current locals; in this case, if no
+execution frame is active then \NULL{} is returned but
+\cfunction{PyErr_Occurred()} will return false.
+\end{cfuncdesc}
+
\section{Number Protocol \label{number}}