mirror of
https://github.com/python/cpython.git
synced 2025-10-21 06:02:21 +00:00
Issue #18408: Add a new PyFrame_FastToLocalsWithError() function to handle
exceptions when merging fast locals into f_locals of a frame. PyEval_GetLocals() now raises an exception and return NULL on failure.
This commit is contained in:
parent
28c63f7ffb
commit
41bb43a71e
7 changed files with 87 additions and 46 deletions
|
@ -755,8 +755,11 @@ builtin_eval(PyObject *self, PyObject *args)
|
|||
}
|
||||
if (globals == Py_None) {
|
||||
globals = PyEval_GetGlobals();
|
||||
if (locals == Py_None)
|
||||
if (locals == Py_None) {
|
||||
locals = PyEval_GetLocals();
|
||||
if (locals == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (locals == Py_None)
|
||||
locals = globals;
|
||||
|
@ -820,6 +823,8 @@ builtin_exec(PyObject *self, PyObject *args)
|
|||
globals = PyEval_GetGlobals();
|
||||
if (locals == Py_None) {
|
||||
locals = PyEval_GetLocals();
|
||||
if (locals == NULL)
|
||||
return NULL;
|
||||
}
|
||||
if (!globals || !locals) {
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
|
@ -1926,13 +1931,9 @@ builtin_vars(PyObject *self, PyObject *args)
|
|||
return NULL;
|
||||
if (v == NULL) {
|
||||
d = PyEval_GetLocals();
|
||||
if (d == NULL) {
|
||||
if (!PyErr_Occurred())
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
"vars(): no locals!?");
|
||||
}
|
||||
else
|
||||
Py_INCREF(d);
|
||||
if (d == NULL)
|
||||
return NULL;
|
||||
Py_INCREF(d);
|
||||
}
|
||||
else {
|
||||
_Py_IDENTIFIER(__dict__);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue