If a code object is compiled with nested scopes, define the CO_NESTED flag.
authorJeremy Hylton <jeremy@alum.mit.edu>
Thu, 22 Mar 2001 02:32:48 +0000 (02:32 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Thu, 22 Mar 2001 02:32:48 +0000 (02:32 +0000)
Add PyEval_GetNestedScopes() which returns a non-zero value if the
code for the current interpreter frame has CO_NESTED defined.

Include/ceval.h
Include/compile.h
Python/ceval.c
Python/compile.c

index 35276260d0821b765a3dce8e4740113f0db97c85..4e6889e205901b1ab735ff4eefdfe327504af87d 100644 (file)
@@ -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);
 
index deb8ee8a980c61c3737476c2b3b3fe1acf20b761..e60af59edb63a67c5a02d9d774d1a4918c4e44fb 100644 (file)
@@ -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;
 
index 156866f0bc2fa10e4cdc57632e11ff8dbdfb6add..658ccb2a0e2ca09aaacc9adc59913cb3a632ca36 100644 (file)
@@ -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)
 {
@@ -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;
index cd936a3aff6cc3b5c4ce54ecb85b2567218e6d74..81be10351506764991ee2463aecb9dcf9f569a38 100644 (file)
@@ -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) {