mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
bpo-38858: new_interpreter() reuses pycore_init_builtins() (GH-17351)
new_interpreter() now calls _PyBuiltin_Init() to create the builtins module and calls _PyImport_FixupBuiltin(), rather than using _PyImport_FindBuiltin(tstate, "builtins"). pycore_init_builtins() is now responsible to initialize intepr->builtins_copy: inline _PyImport_Init() and remove this function.
This commit is contained in:
parent
82c83bd907
commit
2582d46fbc
4 changed files with 24 additions and 43 deletions
|
@ -3045,8 +3045,6 @@ Py_XINCREF:PyObject*:o:+1:if o is not NULL
|
||||||
|
|
||||||
_PyImport_Fini:void:::
|
_PyImport_Fini:void:::
|
||||||
|
|
||||||
_PyImport_Init:void:::
|
|
||||||
|
|
||||||
_PyObject_New:PyObject*::+1:
|
_PyObject_New:PyObject*::+1:
|
||||||
_PyObject_New:PyTypeObject*:type:0:
|
_PyObject_New:PyTypeObject*:type:0:
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict);
|
||||||
extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
|
extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
|
||||||
extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
|
extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
|
||||||
extern int _PySys_InitMain(PyThreadState *tstate);
|
extern int _PySys_InitMain(PyThreadState *tstate);
|
||||||
extern PyStatus _PyImport_Init(PyThreadState *tstate);
|
|
||||||
extern PyStatus _PyExc_Init(void);
|
extern PyStatus _PyExc_Init(void);
|
||||||
extern PyStatus _PyErr_Init(void);
|
extern PyStatus _PyErr_Init(void);
|
||||||
extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod);
|
extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod);
|
||||||
|
|
|
@ -48,17 +48,6 @@ module _imp
|
||||||
|
|
||||||
/* Initialize things */
|
/* Initialize things */
|
||||||
|
|
||||||
PyStatus
|
|
||||||
_PyImport_Init(PyThreadState *tstate)
|
|
||||||
{
|
|
||||||
PyInterpreterState *interp = tstate->interp;
|
|
||||||
interp->builtins_copy = PyDict_Copy(interp->builtins);
|
|
||||||
if (interp->builtins_copy == NULL) {
|
|
||||||
return _PyStatus_ERR("Can't backup builtins dict");
|
|
||||||
}
|
|
||||||
return _PyStatus_OK();
|
|
||||||
}
|
|
||||||
|
|
||||||
PyStatus
|
PyStatus
|
||||||
_PyImportHooks_Init(PyThreadState *tstate)
|
_PyImportHooks_Init(PyThreadState *tstate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -622,25 +622,36 @@ pycore_init_types(PyThreadState *tstate)
|
||||||
static PyStatus
|
static PyStatus
|
||||||
pycore_init_builtins(PyThreadState *tstate)
|
pycore_init_builtins(PyThreadState *tstate)
|
||||||
{
|
{
|
||||||
PyInterpreterState *interp = tstate->interp;
|
|
||||||
|
|
||||||
PyObject *bimod = _PyBuiltin_Init(tstate);
|
PyObject *bimod = _PyBuiltin_Init(tstate);
|
||||||
if (bimod == NULL) {
|
if (bimod == NULL) {
|
||||||
return _PyStatus_ERR("can't initialize builtins modules");
|
goto error;
|
||||||
}
|
}
|
||||||
_PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
|
|
||||||
|
|
||||||
interp->builtins = PyModule_GetDict(bimod);
|
PyInterpreterState *interp = tstate->interp;
|
||||||
if (interp->builtins == NULL) {
|
if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
|
||||||
return _PyStatus_ERR("can't initialize builtins dict");
|
goto error;
|
||||||
}
|
}
|
||||||
Py_INCREF(interp->builtins);
|
|
||||||
|
PyObject *builtins_dict = PyModule_GetDict(bimod);
|
||||||
|
if (builtins_dict == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
Py_INCREF(builtins_dict);
|
||||||
|
interp->builtins = builtins_dict;
|
||||||
|
|
||||||
PyStatus status = _PyBuiltins_AddExceptions(bimod);
|
PyStatus status = _PyBuiltins_AddExceptions(bimod);
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
if (_PyStatus_EXCEPTION(status)) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interp->builtins_copy = PyDict_Copy(interp->builtins);
|
||||||
|
if (interp->builtins_copy == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
return _PyStatus_OK();
|
return _PyStatus_OK();
|
||||||
|
|
||||||
|
error:
|
||||||
|
return _PyStatus_ERR("can't initialize builtins module");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,12 +660,7 @@ pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
|
||||||
{
|
{
|
||||||
const PyConfig *config = &tstate->interp->config;
|
const PyConfig *config = &tstate->interp->config;
|
||||||
|
|
||||||
PyStatus status = _PyImport_Init(tstate);
|
PyStatus status = _PyImportHooks_Init(tstate);
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = _PyImportHooks_Init(tstate);
|
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
if (_PyStatus_EXCEPTION(status)) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -1558,23 +1564,12 @@ new_interpreter(PyThreadState **tstate_p)
|
||||||
goto handle_exc;
|
goto handle_exc;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins");
|
status = pycore_init_builtins(tstate);
|
||||||
if (bimod != NULL) {
|
if (_PyStatus_EXCEPTION(status)) {
|
||||||
interp->builtins = PyModule_GetDict(bimod);
|
goto done;
|
||||||
if (interp->builtins == NULL)
|
|
||||||
goto handle_exc;
|
|
||||||
Py_INCREF(interp->builtins);
|
|
||||||
}
|
|
||||||
else if (_PyErr_Occurred(tstate)) {
|
|
||||||
goto handle_exc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bimod != NULL && sysmod != NULL) {
|
if (sysmod != NULL) {
|
||||||
status = _PyBuiltins_AddExceptions(bimod);
|
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = _PySys_SetPreliminaryStderr(interp->sysdict);
|
status = _PySys_SetPreliminaryStderr(interp->sysdict);
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
if (_PyStatus_EXCEPTION(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue