Skip to content

Commit 28d9353

Browse files
Minor fixes to C API docs (GH-31501)
* C API docs: move PyErr_SetImportErrorSubclass docs It was in the section about warnings, but it makes more sense to put it with PyErr_SetImportError. * C API docs: document closeit argument to PyRun_AnyFileExFlags It was already documented for PyRun_SimpleFileExFlags. * textual fixes to unicode docs * Move paragraph about tp_dealloc into tp_dealloc section * __aiter__ returns an async iterator, not an awaitable (cherry picked from commit 43cf44d) Co-authored-by: Jelle Zijlstra <[email protected]>
1 parent 4955a9e commit 28d9353

File tree

4 files changed

+28
-24
lines changed

4 files changed

+28
-24
lines changed

Doc/c-api/exceptions.rst

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,14 @@ For convenience, some of these functions will always return a
253253
.. versionadded:: 3.3
254254
255255
256+
.. c:function:: PyObject* PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg, PyObject *name, PyObject *path)
257+
258+
Much like :c:func:`PyErr_SetImportError` but this function allows for
259+
specifying a subclass of :exc:`ImportError` to raise.
260+
261+
.. versionadded:: 3.6
262+
263+
256264
.. c:function:: void PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset)
257265
258266
Set file, line, and offset information for the current exception. If the
@@ -320,13 +328,6 @@ an error value).
320328
:mod:`warnings` module and the :option:`-W` option in the command line
321329
documentation. There is no C API for warning control.
322330
323-
.. c:function:: PyObject* PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg, PyObject *name, PyObject *path)
324-
325-
Much like :c:func:`PyErr_SetImportError` but this function allows for
326-
specifying a subclass of :exc:`ImportError` to raise.
327-
328-
.. versionadded:: 3.6
329-
330331
331332
.. c:function:: int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry)
332333

Doc/c-api/typeobj.rst

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ PyObject Slots
476476
--------------
477477

478478
The type object structure extends the :c:type:`PyVarObject` structure. The
479-
:attr:`ob_size` field is used for dynamic types (created by :func:`type_new`,
479+
:attr:`ob_size` field is used for dynamic types (created by :func:`type_new`,
480480
usually called from a class statement). Note that :c:data:`PyType_Type` (the
481481
metatype) initializes :c:member:`~PyTypeObject.tp_itemsize`, which means that its instances (i.e.
482482
type objects) *must* have the :attr:`ob_size` field.
@@ -1999,6 +1999,17 @@ and :c:type:`PyType_Type` effectively act as defaults.)
19991999
For this field to be taken into account (even through inheritance),
20002000
you must also set the :const:`Py_TPFLAGS_HAVE_FINALIZE` flags bit.
20012001

2002+
Also, note that, in a garbage collected Python,
2003+
:c:member:`~PyTypeObject.tp_dealloc` may be called from
2004+
any Python thread, not just the thread which created the object (if the object
2005+
becomes part of a refcount cycle, that cycle might be collected by a garbage
2006+
collection on any thread). This is not a problem for Python API calls, since
2007+
the thread on which tp_dealloc is called will own the Global Interpreter Lock
2008+
(GIL). However, if the object being destroyed in turn destroys objects from some
2009+
other C or C++ library, care should be taken to ensure that destroying those
2010+
objects on the thread which called tp_dealloc will not violate any assumptions
2011+
of the library.
2012+
20022013
**Inheritance:**
20032014

20042015
This field is inherited by subtypes.
@@ -2023,17 +2034,6 @@ and :c:type:`PyType_Type` effectively act as defaults.)
20232034
.. versionadded:: 3.9 (the field exists since 3.8 but it's only used since 3.9)
20242035

20252036

2026-
Also, note that, in a garbage collected Python, :c:member:`~PyTypeObject.tp_dealloc` may be called from
2027-
any Python thread, not just the thread which created the object (if the object
2028-
becomes part of a refcount cycle, that cycle might be collected by a garbage
2029-
collection on any thread). This is not a problem for Python API calls, since
2030-
the thread on which tp_dealloc is called will own the Global Interpreter Lock
2031-
(GIL). However, if the object being destroyed in turn destroys objects from some
2032-
other C or C++ library, care should be taken to ensure that destroying those
2033-
objects on the thread which called tp_dealloc will not violate any assumptions
2034-
of the library.
2035-
2036-
20372037
.. _static-types:
20382038

20392039
Static Types
@@ -2439,7 +2439,8 @@ Async Object Structures
24392439

24402440
PyObject *am_aiter(PyObject *self);
24412441

2442-
Must return an :term:`awaitable` object. See :meth:`__anext__` for details.
2442+
Must return an :term:`asynchronous iterator` object.
2443+
See :meth:`__anext__` for details.
24432444

24442445
This slot may be set to ``NULL`` if an object does not implement
24452446
asynchronous iteration protocol.

Doc/c-api/unicode.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ Error handling is set by errors which may also be set to ``NULL`` meaning to use
10081008
the default handling defined for the codec. Default error handling for all
10091009
built-in codecs is "strict" (:exc:`ValueError` is raised).
10101010
1011-
The codecs all use a similar interface. Only deviation from the following
1011+
The codecs all use a similar interface. Only deviations from the following
10121012
generic ones are documented for simplicity.
10131013
10141014
@@ -1225,7 +1225,7 @@ These are the UTF-16 codec APIs:
12251225
``1``, any byte order mark is copied to the output (where it will result in
12261226
either a ``\ufeff`` or a ``\ufffe`` character).
12271227
1228-
After completion, *\*byteorder* is set to the current byte order at the end
1228+
After completion, ``*byteorder`` is set to the current byte order at the end
12291229
of input data.
12301230
12311231
If *byteorder* is ``NULL``, the codec starts in native order mode.
@@ -1443,7 +1443,7 @@ Character Map Codecs
14431443
14441444
This codec is special in that it can be used to implement many different codecs
14451445
(and this is in fact what was done to obtain most of the standard codecs
1446-
included in the :mod:`encodings` package). The codec uses mapping to encode and
1446+
included in the :mod:`encodings` package). The codec uses mappings to encode and
14471447
decode characters. The mapping objects provided must support the
14481448
:meth:`__getitem__` mapping interface; dictionaries and sequences work well.
14491449
@@ -1605,7 +1605,7 @@ They all return ``NULL`` or ``-1`` if an exception occurs.
16051605
.. c:function:: PyObject* PyUnicode_Splitlines(PyObject *s, int keepend)
16061606
16071607
Split a Unicode string at line breaks, returning a list of Unicode strings.
1608-
CRLF is considered to be one line break. If *keepend* is ``0``, the Line break
1608+
CRLF is considered to be one line break. If *keepend* is ``0``, the line break
16091609
characters are not included in the resulting strings.
16101610
16111611

Doc/c-api/veryhigh.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ the same library that the Python runtime is using.
7575
:c:func:`PyRun_SimpleFile`. *filename* is decoded from the filesystem
7676
encoding (:func:`sys.getfilesystemencoding`). If *filename* is ``NULL``, this
7777
function uses ``"???"`` as the filename.
78+
If *closeit* is true, the file is closed before
79+
``PyRun_SimpleFileExFlags()`` returns.
7880
7981
8082
.. c:function:: int PyRun_SimpleString(const char *command)

0 commit comments

Comments
 (0)