bpo-32030: Split Py_Main() into subfunctions (#4399) · python/cpython@f7e5b56 (original) (raw)

`@@ -20,18 +20,44 @@ PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);

`

20

20

`PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding,

`

21

21

`const char *errors);

`

22

22

``

``

23

`+

typedef struct {

`

``

24

`+

const char *prefix;

`

``

25

`+

const char *msg;

`

``

26

`+

int user_err;

`

``

27

`+

} _PyInitError;

`

``

28

+

``

29

`+

/* Almost all errors causing Python initialization to fail */

`

``

30

`+

#ifdef _MSC_VER

`

``

31

`+

/* Visual Studio 2015 doesn't implement C99 func in C */

`

``

32

`+

define _Py_INIT_GET_FUNC() FUNCTION

`

``

33

`+

#else

`

``

34

`+

define _Py_INIT_GET_FUNC() func

`

``

35

`+

#endif

`

``

36

+

``

37

`+

#define _Py_INIT_OK() \

`

``

38

`+

(_PyInitError){.prefix = NULL, .msg = NULL, .user_err = 0}

`

``

39

`+

#define _Py_INIT_ERR(MSG) \

`

``

40

`+

(_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 0}

`

``

41

`+

/* Error that can be fixed by the user like invalid input parameter.

`

``

42

`+

Don't abort() the process on such error. */

`

``

43

`+

#define _Py_INIT_USER_ERR(MSG) \

`

``

44

`+

(_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 1}

`

``

45

`+

#define _Py_INIT_FAILED(err) \

`

``

46

`+

(err.msg != NULL)

`

``

47

+

23

48

`/* PEP 432 Multi-phase initialization API (Private while provisional!) */

`

24

``

`-

PyAPI_FUNC(void) _Py_InitializeCore(const _PyCoreConfig *);

`

``

49

`+

PyAPI_FUNC(_PyInitError) _Py_InitializeCore(const _PyCoreConfig *);

`

25

50

`PyAPI_FUNC(int) _Py_IsCoreInitialized(void);

`

26

``

`-

PyAPI_FUNC(int) _Py_ReadMainInterpreterConfig(_PyMainInterpreterConfig *);

`

27

``

`-

PyAPI_FUNC(int) _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *);

`

``

51

`+

PyAPI_FUNC(_PyInitError) _Py_ReadMainInterpreterConfig(_PyMainInterpreterConfig *);

`

``

52

`+

PyAPI_FUNC(_PyInitError) _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *);

`

28

53

`#endif

`

29

54

``

30

55

`/* Initialization and finalization */

`

31

56

`PyAPI_FUNC(void) Py_Initialize(void);

`

32

57

`PyAPI_FUNC(void) Py_InitializeEx(int);

`

33

58

`#ifndef Py_LIMITED_API

`

34

``

`-

PyAPI_FUNC(void) _Py_InitializeEx_Private(int, int);

`

``

59

`+

PyAPI_FUNC(_PyInitError) _Py_InitializeEx_Private(int, int);

`

``

60

`+

PyAPI_FUNC(void) _Py_FatalInitError(_PyInitError err) _Py_NO_RETURN;

`

35

61

`#endif

`

36

62

`PyAPI_FUNC(void) Py_Finalize(void);

`

37

63

`PyAPI_FUNC(int) Py_FinalizeEx(void);

`

`@@ -50,7 +76,7 @@ PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(void));

`

50

76

`#endif

`

51

77

`PyAPI_FUNC(int) Py_AtExit(void (*func)(void));

`

52

78

``

53

``

`-

PyAPI_FUNC(void) Py_Exit(int);

`

``

79

`+

PyAPI_FUNC(void) Py_Exit(int) _Py_NO_RETURN;

`

54

80

``

55

81

`/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */

`

56

82

`#ifndef Py_LIMITED_API

`

`@@ -86,15 +112,15 @@ PyAPI_FUNC(const char *) _Py_gitversion(void);

`

86

112

`/* Internal -- various one-time initializations */

`

87

113

`#ifndef Py_LIMITED_API

`

88

114

`PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);

`

89

``

`-

PyAPI_FUNC(PyObject *) _PySys_BeginInit(void);

`

``

115

`+

PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod);

`

90

116

`PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict);

`

91

``

`-

PyAPI_FUNC(void) _PyImport_Init(void);

`

``

117

`+

PyAPI_FUNC(_PyInitError) _PyImport_Init(void);

`

92

118

`PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod);

`

93

``

`-

PyAPI_FUNC(void) _PyImportHooks_Init(void);

`

``

119

`+

PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void);

`

94

120

`PyAPI_FUNC(int) _PyFrame_Init(void);

`

95

121

`PyAPI_FUNC(int) _PyFloat_Init(void);

`

96

122

`PyAPI_FUNC(int) PyByteArray_Init(void);

`

97

``

`-

PyAPI_FUNC(void) _Py_HashRandomization_Init(_PyCoreConfig *core_config);

`

``

123

`+

PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(_PyCoreConfig *core_config);

`

98

124

`#endif

`

99

125

``

100

126

`/* Various internal finalizers */

`