Skip to content

Commit

Permalink
bpo-38858: Reorganize pycore_init_types() (GH-17265)
Browse files Browse the repository at this point in the history
* Call _PyLong_Init() and _PyExc_Init() earlier
* new_interpreter() reuses pycore_init_types()
  • Loading branch information
vstinner authored Nov 19, 2019
1 parent ac22354 commit ef5aa9a
Showing 1 changed file with 11 additions and 20 deletions.
31 changes: 11 additions & 20 deletions Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,19 +565,15 @@ pycore_init_types(void)
return status;
}

if (!_PyLong_Init()) {
return _PyStatus_ERR("can't init longs");
}

status = _PyUnicode_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
}

if (_PyStructSequence_Init() < 0) {
return _PyStatus_ERR("can't initialize structseq");
}

if (!_PyLong_Init()) {
return _PyStatus_ERR("can't init longs");
}

status = _PyExc_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
Expand All @@ -587,15 +583,19 @@ pycore_init_types(void)
return _PyStatus_ERR("can't init float");
}

if (!_PyContext_Init()) {
return _PyStatus_ERR("can't init context");
if (_PyStructSequence_Init() < 0) {
return _PyStatus_ERR("can't initialize structseq");
}

status = _PyErr_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
}

if (!_PyContext_Init()) {
return _PyStatus_ERR("can't init context");
}

return _PyStatus_OK();
}

Expand Down Expand Up @@ -1447,16 +1447,7 @@ new_interpreter(PyThreadState **tstate_p)
}
config = &interp->config;

status = _PyExc_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
}

status = _PyErr_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
}

status = pycore_init_types();

/* XXX The following is lax in error checking */
PyObject *modules = PyDict_New();
Expand Down

0 comments on commit ef5aa9a

Please sign in to comment.