Skip to content

Commit

Permalink
If a code object is compiled with nested scopes, define the CO_NESTED…
Browse files Browse the repository at this point in the history
… flag.

Add PyEval_GetNestedScopes() which returns a non-zero value if the
code for the current interpreter frame has CO_NESTED defined.
  • Loading branch information
jeremyhylton committed Mar 22, 2001
1 parent f6e47ad commit 061d106
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
1 change: 1 addition & 0 deletions Include/ceval.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ DL_IMPORT(PyObject *) PyEval_GetLocals(void);
DL_IMPORT(PyObject *) PyEval_GetOwner(void);
DL_IMPORT(PyObject *) PyEval_GetFrame(void);
DL_IMPORT(int) PyEval_GetRestricted(void);
DL_IMPORT(int) PyEval_GetNestedScopes(void);

DL_IMPORT(int) Py_FlushLine(void);

Expand Down
1 change: 1 addition & 0 deletions Include/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ typedef struct {
#define CO_NEWLOCALS 0x0002
#define CO_VARARGS 0x0004
#define CO_VARKEYWORDS 0x0008
#define CO_NESTED 0x0010

extern DL_IMPORT(PyTypeObject) PyCode_Type;

Expand Down
10 changes: 9 additions & 1 deletion Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -2666,6 +2666,14 @@ PyEval_GetRestricted(void)
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
Py_FlushLine(void)
{
Expand Down Expand Up @@ -3448,7 +3456,7 @@ exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
else if (PyFile_Check(prog)) {
FILE *fp = PyFile_AsFile(prog);
char *name = PyString_AsString(PyFile_Name(prog));
v = PyRun_File(fp, name, Py_file_input, globals, locals);
v = PyRun_File(fp, name, Py_file_input, globals, locals);
}
else {
char *str;
Expand Down
2 changes: 2 additions & 0 deletions Python/compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -4276,6 +4276,8 @@ static int
symtable_update_flags(struct compiling *c, PySymtableEntryObject *ste,
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)
c->c_flags |= CO_NEWLOCALS;
if (ste->ste_type == TYPE_FUNCTION) {
Expand Down

0 comments on commit 061d106

Please sign in to comment.