mirror of
https://github.com/python/cpython.git
synced 2025-08-24 02:35:59 +00:00
bpo-43687: Py_Initialize() creates singletons earlier (GH-25147)
Reorganize pycore_interp_init() to initialize singletons before the the first PyType_Ready() call. Fix an issue when Python is configured using --without-doc-strings.
This commit is contained in:
parent
58384c6ab0
commit
442ad74fc2
8 changed files with 138 additions and 95 deletions
|
@ -15676,18 +15676,6 @@ PyTypeObject PyUnicode_Type = {
|
|||
PyStatus
|
||||
_PyUnicode_Init(PyInterpreterState *interp)
|
||||
{
|
||||
/* XXX - move this array to unicodectype.c ? */
|
||||
const Py_UCS2 linebreak[] = {
|
||||
0x000A, /* LINE FEED */
|
||||
0x000D, /* CARRIAGE RETURN */
|
||||
0x001C, /* FILE SEPARATOR */
|
||||
0x001D, /* GROUP SEPARATOR */
|
||||
0x001E, /* RECORD SEPARATOR */
|
||||
0x0085, /* NEXT LINE */
|
||||
0x2028, /* LINE SEPARATOR */
|
||||
0x2029, /* PARAGRAPH SEPARATOR */
|
||||
};
|
||||
|
||||
struct _Py_unicode_state *state = &interp->unicode;
|
||||
if (unicode_create_empty_string_singleton(state) < 0) {
|
||||
return _PyStatus_NO_MEMORY();
|
||||
|
@ -15695,23 +15683,39 @@ _PyUnicode_Init(PyInterpreterState *interp)
|
|||
|
||||
if (_Py_IsMainInterpreter(interp)) {
|
||||
/* initialize the linebreak bloom filter */
|
||||
const Py_UCS2 linebreak[] = {
|
||||
0x000A, /* LINE FEED */
|
||||
0x000D, /* CARRIAGE RETURN */
|
||||
0x001C, /* FILE SEPARATOR */
|
||||
0x001D, /* GROUP SEPARATOR */
|
||||
0x001E, /* RECORD SEPARATOR */
|
||||
0x0085, /* NEXT LINE */
|
||||
0x2028, /* LINE SEPARATOR */
|
||||
0x2029, /* PARAGRAPH SEPARATOR */
|
||||
};
|
||||
bloom_linebreak = make_bloom_mask(
|
||||
PyUnicode_2BYTE_KIND, linebreak,
|
||||
Py_ARRAY_LENGTH(linebreak));
|
||||
}
|
||||
|
||||
if (PyType_Ready(&PyUnicode_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize unicode type");
|
||||
}
|
||||
return _PyStatus_OK();
|
||||
}
|
||||
|
||||
if (PyType_Ready(&EncodingMapType) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize encoding map type");
|
||||
}
|
||||
if (PyType_Ready(&PyFieldNameIter_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize field name iterator type");
|
||||
}
|
||||
if (PyType_Ready(&PyFormatterIter_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize formatter iter type");
|
||||
}
|
||||
|
||||
PyStatus
|
||||
_PyUnicode_InitTypes(void)
|
||||
{
|
||||
if (PyType_Ready(&PyUnicode_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize unicode type");
|
||||
}
|
||||
if (PyType_Ready(&EncodingMapType) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize encoding map type");
|
||||
}
|
||||
if (PyType_Ready(&PyFieldNameIter_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize field name iterator type");
|
||||
}
|
||||
if (PyType_Ready(&PyFormatterIter_Type) < 0) {
|
||||
return _PyStatus_ERR("Can't initialize formatter iter type");
|
||||
}
|
||||
return _PyStatus_OK();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue