diff options
Diffstat (limited to 'Python/sysmodule.c')
| -rw-r--r-- | Python/sysmodule.c | 41 | 
1 files changed, 18 insertions, 23 deletions
| diff --git a/Python/sysmodule.c b/Python/sysmodule.c index dd127a1f7c..9e13d49417 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -36,12 +36,14 @@ extern const char *PyWin_DLLVersionString;  _Py_IDENTIFIER(_);  _Py_IDENTIFIER(__sizeof__); +_Py_IDENTIFIER(_xoptions);  _Py_IDENTIFIER(buffer);  _Py_IDENTIFIER(builtins);  _Py_IDENTIFIER(encoding);  _Py_IDENTIFIER(path);  _Py_IDENTIFIER(stdout);  _Py_IDENTIFIER(stderr); +_Py_IDENTIFIER(warnoptions);  _Py_IDENTIFIER(write);  PyObject * @@ -1481,13 +1483,17 @@ list_builtin_module_names(void)  static PyObject *  get_warnoptions(void)  { -    PyObject *warnoptions = PyThreadState_GET()->interp->warnoptions; +    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);      if (warnoptions == NULL || !PyList_Check(warnoptions)) {          Py_XDECREF(warnoptions);          warnoptions = PyList_New(0);          if (warnoptions == NULL)              return NULL; -        PyThreadState_GET()->interp->warnoptions = warnoptions; +        if (_PySys_SetObjectId(&PyId_warnoptions, warnoptions)) { +            Py_DECREF(warnoptions); +            return NULL; +        } +        Py_DECREF(warnoptions);      }      return warnoptions;  } @@ -1495,7 +1501,7 @@ get_warnoptions(void)  void  PySys_ResetWarnOptions(void)  { -    PyObject *warnoptions = PyThreadState_GET()->interp->warnoptions; +    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);      if (warnoptions == NULL || !PyList_Check(warnoptions))          return;      PyList_SetSlice(warnoptions, 0, PyList_GET_SIZE(warnoptions), NULL); @@ -1524,20 +1530,24 @@ PySys_AddWarnOption(const wchar_t *s)  int  PySys_HasWarnOptions(void)  { -    PyObject *warnoptions = PyThreadState_GET()->interp->warnoptions; +    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);      return (warnoptions != NULL && (PyList_Size(warnoptions) > 0)) ? 1 : 0;  }  static PyObject *  get_xoptions(void)  { -    PyObject *xoptions = PyThreadState_GET()->interp->xoptions; +    PyObject *xoptions = _PySys_GetObjectId(&PyId__xoptions);      if (xoptions == NULL || !PyDict_Check(xoptions)) {          Py_XDECREF(xoptions);          xoptions = PyDict_New();          if (xoptions == NULL)              return NULL; -        PyThreadState_GET()->interp->xoptions = xoptions; +        if (_PySys_SetObjectId(&PyId__xoptions, xoptions)) { +            Py_DECREF(xoptions); +            return NULL; +        } +        Py_DECREF(xoptions);      }      return xoptions;  } @@ -2086,16 +2096,6 @@ _PySys_BeginInit(void)  #undef SET_SYS_FROM_STRING_BORROW  /* Updating the sys namespace, returning integer error codes */ -#define SET_SYS_FROM_STRING_BORROW_INT_RESULT(key, value)  \ -    do {                                                   \ -        PyObject *v = (value);                             \ -        if (v == NULL)                                     \ -            return -1;                                     \ -        res = PyDict_SetItemString(sysdict, key, v);       \ -        if (res < 0) {                                     \ -            return res;                                    \ -        }                                                  \ -    } while (0)  #define SET_SYS_FROM_STRING_INT_RESULT(key, value)         \      do {                                                   \          PyObject *v = (value);                             \ @@ -2140,15 +2140,11 @@ _PySys_EndInit(PyObject *sysdict)      SET_SYS_FROM_STRING_INT_RESULT("base_exec_prefix",                          PyUnicode_FromWideChar(Py_GetExecPrefix(), -1)); -    PyObject *warnoptions = get_warnoptions(); -    if (warnoptions == NULL) +    if (get_warnoptions() == NULL)          return -1; -    SET_SYS_FROM_STRING_BORROW_INT_RESULT("warnoptions", warnoptions); -    PyObject *xoptions = get_xoptions(); -    if (xoptions == NULL) +    if (get_xoptions() == NULL)          return -1; -    SET_SYS_FROM_STRING_BORROW_INT_RESULT("_xoptions", xoptions);      if (PyErr_Occurred())          return -1; @@ -2156,7 +2152,6 @@ _PySys_EndInit(PyObject *sysdict)  }  #undef SET_SYS_FROM_STRING_INT_RESULT -#undef SET_SYS_FROM_STRING_BORROW_INT_RESULT  static PyObject *  makepathobject(const wchar_t *path, wchar_t delim) | 
