Issue #18589: fix hyperlinking of type slots (tp_*)

This commit is contained in:
Antoine Pitrou 2013-08-01 21:12:45 +02:00
parent b3c872403d
commit 39668f57f4
9 changed files with 192 additions and 192 deletions

View file

@ -607,28 +607,28 @@ recursion depth automatically).
Ends a :c:func:`Py_EnterRecursiveCall`. Must be called once for each
*successful* invocation of :c:func:`Py_EnterRecursiveCall`.
Properly implementing :attr:`tp_repr` for container types requires
Properly implementing :c:member:`~PyTypeObject.tp_repr` for container types requires
special recursion handling. In addition to protecting the stack,
:attr:`tp_repr` also needs to track objects to prevent cycles. The
:c:member:`~PyTypeObject.tp_repr` also needs to track objects to prevent cycles. The
following two functions facilitate this functionality. Effectively,
these are the C equivalent to :func:`reprlib.recursive_repr`.
.. c:function:: int Py_ReprEnter(PyObject *object)
Called at the beginning of the :attr:`tp_repr` implementation to
Called at the beginning of the :c:member:`~PyTypeObject.tp_repr` implementation to
detect cycles.
If the object has already been processed, the function returns a
positive integer. In that case the :attr:`tp_repr` implementation
positive integer. In that case the :c:member:`~PyTypeObject.tp_repr` implementation
should return a string object indicating a cycle. As examples,
:class:`dict` objects return ``{...}`` and :class:`list` objects
return ``[...]``.
The function will return a negative integer if the recursion limit
is reached. In that case the :attr:`tp_repr` implementation should
is reached. In that case the :c:member:`~PyTypeObject.tp_repr` implementation should
typically return ``NULL``.
Otherwise, the function returns zero and the :attr:`tp_repr`
Otherwise, the function returns zero and the :c:member:`~PyTypeObject.tp_repr`
implementation can continue normally.
.. c:function:: void Py_ReprLeave(PyObject *object)