mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
If a code object is compiled with nested scopes, define the CO_NESTED flag.
Add PyEval_GetNestedScopes() which returns a non-zero value if the code for the current interpreter frame has CO_NESTED defined.
This commit is contained in:
parent
f6e47ad4bd
commit
061d106a0f
4 changed files with 13 additions and 1 deletions
|
@ -28,6 +28,7 @@ DL_IMPORT(PyObject *) PyEval_GetLocals(void);
|
||||||
DL_IMPORT(PyObject *) PyEval_GetOwner(void);
|
DL_IMPORT(PyObject *) PyEval_GetOwner(void);
|
||||||
DL_IMPORT(PyObject *) PyEval_GetFrame(void);
|
DL_IMPORT(PyObject *) PyEval_GetFrame(void);
|
||||||
DL_IMPORT(int) PyEval_GetRestricted(void);
|
DL_IMPORT(int) PyEval_GetRestricted(void);
|
||||||
|
DL_IMPORT(int) PyEval_GetNestedScopes(void);
|
||||||
|
|
||||||
DL_IMPORT(int) Py_FlushLine(void);
|
DL_IMPORT(int) Py_FlushLine(void);
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ typedef struct {
|
||||||
#define CO_NEWLOCALS 0x0002
|
#define CO_NEWLOCALS 0x0002
|
||||||
#define CO_VARARGS 0x0004
|
#define CO_VARARGS 0x0004
|
||||||
#define CO_VARKEYWORDS 0x0008
|
#define CO_VARKEYWORDS 0x0008
|
||||||
|
#define CO_NESTED 0x0010
|
||||||
|
|
||||||
extern DL_IMPORT(PyTypeObject) PyCode_Type;
|
extern DL_IMPORT(PyTypeObject) PyCode_Type;
|
||||||
|
|
||||||
|
|
|
@ -2666,6 +2666,14 @@ PyEval_GetRestricted(void)
|
||||||
return current_frame == NULL ? 0 : current_frame->f_restricted;
|
return current_frame == NULL ? 0 : current_frame->f_restricted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
PyEval_GetNestedScopes(void)
|
||||||
|
{
|
||||||
|
PyFrameObject *current_frame = PyThreadState_Get()->frame;
|
||||||
|
return current_frame == NULL ? 0 :
|
||||||
|
current_frame->f_code->co_flags & CO_NESTED;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Py_FlushLine(void)
|
Py_FlushLine(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4276,6 +4276,8 @@ static int
|
||||||
symtable_update_flags(struct compiling *c, PySymtableEntryObject *ste,
|
symtable_update_flags(struct compiling *c, PySymtableEntryObject *ste,
|
||||||
struct symbol_info *si)
|
struct symbol_info *si)
|
||||||
{
|
{
|
||||||
|
if (c->c_future && c->c_future->ff_nested_scopes)
|
||||||
|
c->c_flags |= CO_NESTED;
|
||||||
if (ste->ste_type != TYPE_MODULE)
|
if (ste->ste_type != TYPE_MODULE)
|
||||||
c->c_flags |= CO_NEWLOCALS;
|
c->c_flags |= CO_NEWLOCALS;
|
||||||
if (ste->ste_type == TYPE_FUNCTION) {
|
if (ste->ste_type == TYPE_FUNCTION) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue