diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-01-29 22:51:52 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-01-29 22:51:52 (GMT) |
commit | 2b724da8d9cd0c41a51e798eca75018ce155e997 (patch) | |
tree | 96a1648e0d50dbbd7ae56b3b55e7b44b107362dd /Include | |
parent | 55087f0c351d6de453a5c95293792051d899f16b (diff) | |
download | cpython-2b724da8d9cd0c41a51e798eca75018ce155e997.zip cpython-2b724da8d9cd0c41a51e798eca75018ce155e997.tar.gz cpython-2b724da8d9cd0c41a51e798eca75018ce155e997.tar.bz2 |
Remove f_closure slot of frameobject and use f_localsplus instead.
This change eliminates an extra malloc/free when a frame with free
variables is created. Any cell vars or free vars are stored in
f_localsplus after the locals and before the stack.
eval_code2() fills in the appropriate values after handling
initialization of locals.
To track the size the frame has an f_size member that tracks the total
size of f_localsplus. It used to be implicitly f_nlocals + f_stacksize.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/frameobject.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Include/frameobject.h b/Include/frameobject.h index c19f1d8..d1a310a 100644 --- a/Include/frameobject.h +++ b/Include/frameobject.h @@ -20,7 +20,6 @@ typedef struct _frame { PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ PyObject *f_globals; /* global symbol table (PyDictObject) */ PyObject *f_locals; /* local symbol table (PyDictObject) */ - PyObject *f_closure; /* environment for free variables */ PyObject **f_valuestack; /* points after the last local */ PyObject *f_trace; /* Trace function */ PyObject *f_exc_type, *f_exc_value, *f_exc_traceback; @@ -31,7 +30,10 @@ typedef struct _frame { in this scope */ int f_iblock; /* index in f_blockstack */ PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ + int f_size; /* size of localsplus */ int f_nlocals; /* number of locals */ + int f_ncells; + int f_nfreevars; int f_stacksize; /* size of value stack */ PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ } PyFrameObject; |