summaryrefslogtreecommitdiff
path: root/Python/pylifecycle.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-12-14 02:20:52 +0100
committerGitHub <noreply@github.com>2017-12-14 02:20:52 +0100
commitb5fd9ad05e0f15f8272b8f1b829af22077230584 (patch)
tree14c128a5e3b71864726d6fae4a414883ce6b9440 /Python/pylifecycle.c
parent176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf (diff)
downloadcpython-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.c42
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;
}