diff options
| author | Victor Stinner <vstinner@redhat.com> | 2019-01-22 16:39:03 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-22 16:39:03 (GMT) |
| commit | bf4ac2d2fd520c61306b2676db488adab9b5d8c5 (patch) | |
| tree | 36b7680e9ac88256ba0f3beeb834c677a20914f8 /Objects/unicodeobject.c | |
| parent | 35ca1820e19f81f69073f294503cdcd708fe490f (diff) | |
| download | cpython-bf4ac2d2fd520c61306b2676db488adab9b5d8c5.zip cpython-bf4ac2d2fd520c61306b2676db488adab9b5d8c5.tar.gz cpython-bf4ac2d2fd520c61306b2676db488adab9b5d8c5.tar.bz2 | |
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().
Diffstat (limited to 'Objects/unicodeobject.c')
| -rw-r--r-- | Objects/unicodeobject.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index f1d23b6..ea7bcab 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15199,7 +15199,8 @@ PyTypeObject PyUnicode_Type = { /* Initialize the Unicode implementation */ -int _PyUnicode_Init(void) +_PyInitError +_PyUnicode_Init(void) { /* XXX - move this array to unicodectype.c ? */ Py_UCS2 linebreak[] = { @@ -15215,28 +15216,31 @@ int _PyUnicode_Init(void) /* Init the implementation */ _Py_INCREF_UNICODE_EMPTY(); - if (!unicode_empty) - Py_FatalError("Can't create empty string"); + if (!unicode_empty) { + return _Py_INIT_ERR("Can't create empty string"); + } Py_DECREF(unicode_empty); - if (PyType_Ready(&PyUnicode_Type) < 0) - Py_FatalError("Can't initialize 'unicode'"); + if (PyType_Ready(&PyUnicode_Type) < 0) { + return _Py_INIT_ERR("Can't initialize unicode type"); + } /* initialize the linebreak bloom filter */ bloom_linebreak = make_bloom_mask( PyUnicode_2BYTE_KIND, linebreak, Py_ARRAY_LENGTH(linebreak)); - if (PyType_Ready(&EncodingMapType) < 0) - Py_FatalError("Can't initialize encoding map type"); - - if (PyType_Ready(&PyFieldNameIter_Type) < 0) - Py_FatalError("Can't initialize field name iterator type"); - - if (PyType_Ready(&PyFormatterIter_Type) < 0) - Py_FatalError("Can't initialize formatter iter type"); + if (PyType_Ready(&EncodingMapType) < 0) { + return _Py_INIT_ERR("Can't initialize encoding map type"); + } + if (PyType_Ready(&PyFieldNameIter_Type) < 0) { + return _Py_INIT_ERR("Can't initialize field name iterator type"); + } + if (PyType_Ready(&PyFormatterIter_Type) < 0) { + return _Py_INIT_ERR("Can't initialize formatter iter type"); + } - return 0; + return _Py_INIT_OK(); } /* Finalize the Unicode implementation */ |
