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.
( (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. */