diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-08-29 22:50:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-29 22:50:45 (GMT) |
commit | fbca90856d96273fd87c0b126f6e7966af7fbf7b (patch) | |
tree | 70be23311a03992573d5fb029acb03b208613440 /Python | |
parent | de427556746aa41a8b5198924ce423021bc0c718 (diff) | |
download | cpython-fbca90856d96273fd87c0b126f6e7966af7fbf7b.zip cpython-fbca90856d96273fd87c0b126f6e7966af7fbf7b.tar.gz cpython-fbca90856d96273fd87c0b126f6e7966af7fbf7b.tar.bz2 |
bpo-34523: Use _PyCoreConfig instead of globals (GH-9005)
Use the core configuration of the interpreter, rather
than using global configuration variables. For example, replace
Py_QuietFlag with core_config->quiet.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 5 | ||||
-rw-r--r-- | Python/pylifecycle.c | 19 | ||||
-rw-r--r-- | Python/sysmodule.c | 38 |
3 files changed, 34 insertions, 28 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 8aa1ba0..a23bdc1 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2,6 +2,7 @@ #include "Python.h" #include "Python-ast.h" +#include "internal/pystate.h" #include "node.h" #include "code.h" @@ -2765,6 +2766,8 @@ _PyBuiltin_Init(void) { PyObject *mod, *dict, *debug; + const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config; + if (PyType_Ready(&PyFilter_Type) < 0 || PyType_Ready(&PyMap_Type) < 0 || PyType_Ready(&PyZip_Type) < 0) @@ -2823,7 +2826,7 @@ _PyBuiltin_Init(void) SETBUILTIN("tuple", &PyTuple_Type); SETBUILTIN("type", &PyType_Type); SETBUILTIN("zip", &PyZip_Type); - debug = PyBool_FromLong(Py_OptimizeFlag == 0); + debug = PyBool_FromLong(config->optimization_level == 0); if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { Py_DECREF(debug); return NULL; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index ad55b2c..7d17f2e 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -800,7 +800,7 @@ _Py_InitializeMainInterpreter(PyInterpreterState *interp, return _Py_INIT_ERR("can't initialize time"); } - if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) { + if (_PySys_EndInit(interp->sysdict, interp) < 0) { return _Py_INIT_ERR("can't finish initializing sys"); } @@ -1285,7 +1285,7 @@ new_interpreter(PyThreadState **tstate_p) goto handle_error; Py_INCREF(interp->sysdict); PyDict_SetItemString(interp->sysdict, "modules", modules); - _PySys_EndInit(interp->sysdict, &interp->config); + _PySys_EndInit(interp->sysdict, interp); } bimod = _PyImport_FindBuiltin("builtins", modules); @@ -1543,7 +1543,7 @@ is_valid_fd(int fd) /* returns Py_None if the fd is not valid */ static PyObject* -create_stdio(PyObject* io, +create_stdio(const _PyCoreConfig *config, PyObject* io, int fd, int write_mode, const char* name, const char* encoding, const char* errors) { @@ -1556,6 +1556,7 @@ create_stdio(PyObject* io, _Py_IDENTIFIER(isatty); _Py_IDENTIFIER(TextIOWrapper); _Py_IDENTIFIER(mode); + const int buffered_stdio = config->buffered_stdio; if (!is_valid_fd(fd)) Py_RETURN_NONE; @@ -1565,7 +1566,7 @@ create_stdio(PyObject* io, depends on the presence of a read1() method which only exists on buffered streams. */ - if (Py_UnbufferedStdioFlag && write_mode) + if (!buffered_stdio && write_mode) buffering = 0; else buffering = -1; @@ -1607,11 +1608,11 @@ create_stdio(PyObject* io, Py_DECREF(res); if (isatty == -1) goto error; - if (Py_UnbufferedStdioFlag) + if (!buffered_stdio) write_through = Py_True; else write_through = Py_False; - if (isatty && !Py_UnbufferedStdioFlag) + if (isatty && buffered_stdio) line_buffering = Py_True; else line_buffering = Py_False; @@ -1720,7 +1721,7 @@ init_sys_streams(PyInterpreterState *interp) * and fileno() may point to an invalid file descriptor. For example * GUI apps don't have valid standard streams by default. */ - std = create_stdio(iomod, fd, 0, "<stdin>", + std = create_stdio(config, iomod, fd, 0, "<stdin>", config->stdio_encoding, config->stdio_errors); if (std == NULL) @@ -1731,7 +1732,7 @@ init_sys_streams(PyInterpreterState *interp) /* Set sys.stdout */ fd = fileno(stdout); - std = create_stdio(iomod, fd, 1, "<stdout>", + std = create_stdio(config, iomod, fd, 1, "<stdout>", config->stdio_encoding, config->stdio_errors); if (std == NULL) @@ -1743,7 +1744,7 @@ init_sys_streams(PyInterpreterState *interp) #if 1 /* Disable this if you have trouble debugging bootstrap stuff */ /* Set sys.stderr, replaces the preliminary stderr */ fd = fileno(stderr); - std = create_stdio(iomod, fd, 1, "<stderr>", + std = create_stdio(config, iomod, fd, 1, "<stderr>", config->stdio_encoding, "backslashreplace"); if (std == NULL) diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 91df4b0..58ea605 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2076,7 +2076,7 @@ make_flags(void) { int pos = 0; PyObject *seq; - _PyCoreConfig *core_config = &_PyGILState_GetInterpreterStateUnsafe()->core_config; + const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config; seq = PyStructSequence_New(&FlagsType); if (seq == NULL) @@ -2085,23 +2085,23 @@ make_flags(void) #define SetFlag(flag) \ PyStructSequence_SET_ITEM(seq, pos++, PyLong_FromLong(flag)) - SetFlag(Py_DebugFlag); - SetFlag(Py_InspectFlag); - SetFlag(Py_InteractiveFlag); - SetFlag(Py_OptimizeFlag); - SetFlag(Py_DontWriteBytecodeFlag); - SetFlag(Py_NoUserSiteDirectory); - SetFlag(Py_NoSiteFlag); - SetFlag(Py_IgnoreEnvironmentFlag); - SetFlag(Py_VerboseFlag); + SetFlag(config->parser_debug); + SetFlag(config->inspect); + SetFlag(config->interactive); + SetFlag(config->optimization_level); + SetFlag(!config->write_bytecode); + SetFlag(!config->user_site_directory); + SetFlag(!config->site_import); + SetFlag(!config->use_environment); + SetFlag(config->verbose); /* SetFlag(saw_unbuffered_flag); */ /* SetFlag(skipfirstline); */ - SetFlag(Py_BytesWarningFlag); - SetFlag(Py_QuietFlag); - SetFlag(Py_HashRandomizationFlag); - SetFlag(Py_IsolatedFlag); - PyStructSequence_SET_ITEM(seq, pos++, PyBool_FromLong(core_config->dev_mode)); - SetFlag(Py_UTF8Mode); + SetFlag(config->bytes_warning); + SetFlag(config->quiet); + SetFlag(config->use_hash_seed == 0 || config->hash_seed != 0); + SetFlag(config->isolated); + PyStructSequence_SET_ITEM(seq, pos++, PyBool_FromLong(config->dev_mode)); + SetFlag(config->utf8_mode); #undef SetFlag if (PyErr_Occurred()) { @@ -2474,8 +2474,10 @@ err_occurred: } while (0) int -_PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config) +_PySys_EndInit(PyObject *sysdict, PyInterpreterState *interp) { + const _PyCoreConfig *core_config = &interp->core_config; + const _PyMainInterpreterConfig *config = &interp->config; int res; /* _PyMainInterpreterConfig_Read() must set all these variables */ @@ -2523,7 +2525,7 @@ _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config) } SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode", - PyBool_FromLong(Py_DontWriteBytecodeFlag)); + PyBool_FromLong(!core_config->write_bytecode)); if (get_warnoptions() == NULL) return -1; |