Skip to content

Commit bf4ac2d

Browse files
authored
bpo-35713: Rework Python initialization (GH-11647)
* The PyByteArray_Init() and PyByteArray_Fini() functions have been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were excluded from the limited API (stable ABI), and were not documented. * Move "_PyXXX_Init()" and "_PyXXX_Fini()" declarations from Include/cpython/pylifecycle.h to Include/internal/pycore_pylifecycle.h. Replace "PyAPI_FUNC(TYPE)" with "extern TYPE". * _PyExc_Init() now returns an error on failure rather than calling Py_FatalError(). Move macros inside _PyExc_Init() and undefine them when done. Rewrite macros to make them look more like statement: add ";" when using them, add "do { ... } while (0)". * _PyUnicode_Init() now returns a _PyInitError error rather than call Py_FatalError(). * Move stdin check from _PySys_BeginInit() to init_sys_streams(). * _Py_ReadyTypes() now returns a _PyInitError error rather than calling Py_FatalError().
1 parent 35ca182 commit bf4ac2d

File tree

9 files changed

+290
-272
lines changed

9 files changed

+290
-272
lines changed

Doc/whatsnew/3.8.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,10 @@ Optimizations
328328
Build and C API Changes
329329
=======================
330330

331+
* The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have
332+
been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were
333+
excluded from the limited API (stable ABI), and were not documented.
334+
331335
* The result of :c:func:`PyExceptionClass_Name` is now of type
332336
``const char *`` rather of ``char *``.
333337
(Contributed by Serhiy Storchaka in :issue:`33818`.)

Include/cpython/pylifecycle.h

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -56,33 +56,6 @@ PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *);
5656
PyAPI_FUNC(const char *) _Py_gitidentifier(void);
5757
PyAPI_FUNC(const char *) _Py_gitversion(void);
5858

59-
/* Internal -- various one-time initializations */
60-
PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
61-
PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod);
62-
PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict, PyInterpreterState *interp);
63-
PyAPI_FUNC(_PyInitError) _PyImport_Init(PyInterpreterState *interp);
64-
PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod);
65-
PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void);
66-
PyAPI_FUNC(int) _PyFloat_Init(void);
67-
PyAPI_FUNC(int) PyByteArray_Init(void);
68-
PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(const _PyCoreConfig *);
69-
70-
/* Various internal finalizers */
71-
72-
PyAPI_FUNC(void) PyMethod_Fini(void);
73-
PyAPI_FUNC(void) PyFrame_Fini(void);
74-
PyAPI_FUNC(void) PyCFunction_Fini(void);
75-
PyAPI_FUNC(void) PyDict_Fini(void);
76-
PyAPI_FUNC(void) PyTuple_Fini(void);
77-
PyAPI_FUNC(void) PyList_Fini(void);
78-
PyAPI_FUNC(void) PySet_Fini(void);
79-
PyAPI_FUNC(void) PyBytes_Fini(void);
80-
PyAPI_FUNC(void) PyByteArray_Fini(void);
81-
PyAPI_FUNC(void) PyFloat_Fini(void);
82-
PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
83-
PyAPI_FUNC(void) PySlice_Fini(void);
84-
PyAPI_FUNC(void) PyAsyncGen_Fini(void);
85-
8659
PyAPI_FUNC(int) _Py_IsFinalizing(void);
8760

8861
/* Random */

Include/internal/pycore_pylifecycle.h

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,45 @@ PyAPI_FUNC(void) _Py_ClearStandardStreamEncoding(void);
1919

2020
PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc);
2121

22-
extern int _PyUnicode_Init(void);
22+
/* Various one-time initializers */
23+
24+
extern _PyInitError _PyUnicode_Init(void);
2325
extern int _PyStructSequence_Init(void);
2426
extern int _PyLong_Init(void);
2527
extern _PyInitError _PyFaulthandler_Init(int enable);
2628
extern int _PyTraceMalloc_Init(int enable);
29+
extern PyObject * _PyBuiltin_Init(void);
30+
extern _PyInitError _PySys_BeginInit(PyObject **sysmod);
31+
extern int _PySys_EndInit(PyObject *sysdict, PyInterpreterState *interp);
32+
extern _PyInitError _PyImport_Init(PyInterpreterState *interp);
33+
extern _PyInitError _PyExc_Init(PyObject * bltinmod);
34+
extern _PyInitError _PyImportHooks_Init(void);
35+
extern int _PyFloat_Init(void);
36+
extern _PyInitError _Py_HashRandomization_Init(const _PyCoreConfig *);
2737

2838
extern void _Py_ReadyTypes(void);
2939

30-
PyAPI_FUNC(void) _PyExc_Fini(void);
31-
PyAPI_FUNC(void) _PyImport_Fini(void);
32-
PyAPI_FUNC(void) _PyImport_Fini2(void);
33-
PyAPI_FUNC(void) _PyGC_Fini(void);
34-
PyAPI_FUNC(void) _PyType_Fini(void);
35-
PyAPI_FUNC(void) _Py_HashRandomization_Fini(void);
40+
/* Various internal finalizers */
41+
42+
extern void PyMethod_Fini(void);
43+
extern void PyFrame_Fini(void);
44+
extern void PyCFunction_Fini(void);
45+
extern void PyDict_Fini(void);
46+
extern void PyTuple_Fini(void);
47+
extern void PyList_Fini(void);
48+
extern void PySet_Fini(void);
49+
extern void PyBytes_Fini(void);
50+
extern void PyFloat_Fini(void);
51+
extern void PyOS_FiniInterrupts(void);
52+
extern void PySlice_Fini(void);
53+
extern void PyAsyncGen_Fini(void);
54+
55+
extern void _PyExc_Fini(void);
56+
extern void _PyImport_Fini(void);
57+
extern void _PyImport_Fini2(void);
58+
extern void _PyGC_Fini(void);
59+
extern void _PyType_Fini(void);
60+
extern void _Py_HashRandomization_Fini(void);
3661
extern void _PyUnicode_Fini(void);
3762
extern void PyLong_Fini(void);
3863
extern void _PyFaulthandler_Fini(void);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have
2+
been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were
3+
excluded from the limited API (stable ABI), and were not documented.

Objects/bytearrayobject.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,6 @@ class bytearray "PyByteArrayObject *" "&PyByteArray_Type"
1717

1818
char _PyByteArray_empty_string[] = "";
1919

20-
void
21-
PyByteArray_Fini(void)
22-
{
23-
}
24-
25-
int
26-
PyByteArray_Init(void)
27-
{
28-
return 1;
29-
}
30-
3120
/* end nullbytes support */
3221

3322
/* Helpers */

0 commit comments

Comments
 (0)