bpo-40521: Always create the empty tuple singleton (GH-21116)

Py_InitializeFromConfig() now always creates the empty tuple
singleton as soon as possible.

Optimize PyTuple_New(0): it no longer has to check if the empty tuple
was created or not, it is always creatd.

* Add tuple_create_empty_tuple_singleton() function.
* Add tuple_get_empty() function.
* Remove state parameter of tuple_alloc().
This commit is contained in:
Victor Stinner 2020-06-24 15:21:54 +02:00 committed by GitHub
parent 80526f6841
commit 0430dfac62
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 49 deletions

View file

@ -583,6 +583,14 @@ pycore_init_types(PyThreadState *tstate)
return status;
}
// Create the empty tuple singleton. It must be created before the first
// PyType_Ready() call since PyType_Ready() creates tuples, for tp_bases
// for example.
status = _PyTuple_Init(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
if (is_main_interp) {
status = _PyTypes_Init();
if (_PyStatus_EXCEPTION(status)) {
@ -590,7 +598,6 @@ pycore_init_types(PyThreadState *tstate)
}
}
if (!_PyLong_Init(tstate)) {
return _PyStatus_ERR("can't init longs");
}