diff options
| author | Victor Stinner <vstinner@python.org> | 2020-06-24 13:21:54 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-24 13:21:54 (GMT) |
| commit | 0430dfac629b4eb0e899a09b899a494aa92145f6 (patch) | |
| tree | 5d71dc3e81dcd38f88e14157c0048c9acd705a29 /Python/pylifecycle.c | |
| parent | 80526f68411a9406a9067095fbf6a0f88047cac5 (diff) | |
| download | cpython-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/pylifecycle.c')
| -rw-r--r-- | Python/pylifecycle.c | 9 |
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"); } |
