summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-06-24 13:21:54 (GMT)
committerGitHub <noreply@github.com>2020-06-24 13:21:54 (GMT)
commit0430dfac629b4eb0e899a09b899a494aa92145f6 (patch)
tree5d71dc3e81dcd38f88e14157c0048c9acd705a29 /Python
parent80526f68411a9406a9067095fbf6a0f88047cac5 (diff)
downloadcpython-0430dfac629b4eb0e899a09b899a494aa92145f6.zip
cpython-0430dfac629b4eb0e899a09b899a494aa92145f6.tar.gz
cpython-0430dfac629b4eb0e899a09b899a494aa92145f6.tar.bz2
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().
Diffstat (limited to 'Python')
-rw-r--r--Python/pylifecycle.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index eda4c6a..4b658f8 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -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");
}