Documented the new Py_VISIT macro to simplify implementation of
tp_traverse handlers. (Tim made me do it. ;)
diff --git a/Doc/api/newtypes.tex b/Doc/api/newtypes.tex
index 036664e..2b58cd9 100644
--- a/Doc/api/newtypes.tex
+++ b/Doc/api/newtypes.tex
@@ -1663,6 +1663,29 @@
   that value should be returned immediately.
 \end{ctypedesc}
 
+To simplify writing \member{tp_traverse} handlers, a
+\cfunction{Py_VISIT()} is provided:
+
+\begin{cfuncdesc}{void}{Py_VISIT}{PyObject *o}
+  Call the \var{visit} for \var{o} with \var{arg}. If \var{visit}
+  returns a non-zero value, then return it.  Using this macro,
+  \member{tp_traverse} handlers look like:
+
+
+\begin{verbatim}
+static int
+my_traverse(Noddy *self, visitproc visit, void *arg)
+{
+    Py_VISIT(self->foo);
+    Py_VISIT(self->bar);
+    return 0;
+}
+\end{verbatim}
+
+\versionadded{2.4}
+\end{cfuncdesc}
+
+
 The \member{tp_clear} handler must be of the \ctype{inquiry} type, or
 \NULL{} if the object is immutable.
 
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 3679cba..649d1bc 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -302,6 +302,16 @@
 		( (type *) _PyObject_GC_NewVar((typeobj), (n)) )
 
 
+/* Utility macro to help write tp_traverse functions */
+#define Py_VISIT(op)					\
+        do { 						\
+                if (op) {				\
+                        int vret = visit((op), arg);	\
+                        if (vret)			\
+                                return vret;		\
+                }					\
+        } while (0)
+
 /* This is here for the sake of backwards compatibility.  Extensions that
  * use the old GC API will still compile but the objects will not be
  * tracked by the GC. */