diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-12-14 02:20:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-14 02:20:52 +0100 |
commit | b5fd9ad05e0f15f8272b8f1b829af22077230584 (patch) | |
tree | 14c128a5e3b71864726d6fae4a414883ce6b9440 /Python/pylifecycle.c | |
parent | 176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf (diff) | |
download | cpython-git-b5fd9ad05e0f15f8272b8f1b829af22077230584.tar.gz |
bpo-32030: Rewrite _PyMainInterpreterConfig (#4854)
_PyMainInterpreterConfig now contains Python objects, whereas
_PyCoreConfig contains wchar_t* strings.
Core config:
* Rename _PyMainInterpreterConfig_ReadEnv() to _PyCoreConfig_ReadEnv()
* Move 3 strings from _PyMainInterpreterConfig to _PyCoreConfig:
module_search_path_env, home, program_name.
* Add _PyCoreConfig_Clear()
* _PyPathConfig_Calculate() now takes core config rather than main
config
* _PyMainInterpreterConfig_Read() now requires also a core config
Main config:
* Add _PyMainInterpreterConfig.module_search_path: sys.path list
* Add _PyMainInterpreterConfig.argv: sys.argv list
* _PyMainInterpreterConfig_Read() now computes module_search_path
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r-- | Python/pylifecycle.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 2bac23d1cb..31965f503c 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -792,13 +792,8 @@ _Py_InitializeCore(const _PyCoreConfig *config) */ _PyInitError -_PyMainInterpreterConfig_Read(_PyMainInterpreterConfig *config) +_PyCoreConfig_Read(_PyCoreConfig *config) { - /* Signal handlers are installed by default */ - if (config->install_signal_handlers < 0) { - config->install_signal_handlers = 1; - } - if (config->program_name == NULL) { #ifdef MS_WINDOWS const wchar_t *program_name = L"python"; @@ -814,9 +809,8 @@ _PyMainInterpreterConfig_Read(_PyMainInterpreterConfig *config) return _Py_INIT_OK(); } - void -_PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config) +_PyCoreConfig_Clear(_PyCoreConfig *config) { #define CLEAR(ATTR) \ do { \ @@ -831,6 +825,14 @@ _PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config) } +void +_PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config) +{ + Py_CLEAR(config->argv); + Py_CLEAR(config->module_search_path); +} + + /* Update interpreter state based on supplied configuration settings * * After calling this function, most of the restrictions on the interpreter @@ -881,16 +883,11 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config) return _Py_INIT_ERR("can't initialize time"); } - /* GetPath may initialize state that _PySys_EndInit locks - in, and so has to be called first. */ - err = _PyPathConfig_Init(&interp->config); - if (_Py_INIT_FAILED(err)) { - return err; + assert(interp->config.module_search_path != NULL); + if (PySys_SetObject("path", interp->config.module_search_path) != 0) { + return _Py_INIT_ERR("can't assign sys.path"); } - wchar_t *sys_path = Py_GetPath(); - /* Finish setting up the sys module and import system */ - PySys_SetPath(sys_path); if (_PySys_EndInit(interp->sysdict) < 0) return _Py_INIT_ERR("can't finish initializing sys"); @@ -949,6 +946,12 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config) } } + if (interp->config.argv != NULL) { + if (PySys_SetObject("argv", interp->config.argv) != 0) { + return _Py_INIT_ERR("can't assign sys.argv"); + } + } + return _Py_INIT_OK(); } @@ -970,12 +973,12 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) goto done; } - err = _PyMainInterpreterConfig_ReadEnv(&config); + err = _PyCoreConfig_ReadEnv(&core_config); if (_Py_INIT_FAILED(err)) { goto done; } - err = _PyMainInterpreterConfig_Read(&config); + err = _PyMainInterpreterConfig_Read(&config, &core_config); if (_Py_INIT_FAILED(err)) { goto done; } @@ -988,6 +991,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) err = _Py_INIT_OK(); done: + _PyCoreConfig_Clear(&core_config); _PyMainInterpreterConfig_Clear(&config); return err; } @@ -1342,7 +1346,7 @@ new_interpreter(PyThreadState **tstate_p) interp->config = main_interp->config; } - err = _PyPathConfig_Init(&interp->config); + err = _PyPathConfig_Init(&interp->core_config); if (_Py_INIT_FAILED(err)) { return err; } |