[Python-Dev] Anonymous blocks: Thunks or iterators?
Jim Jewett
jimjjewett at gmail.com
Fri Apr 29 19:17:13 CEST 2005
Brian Sabbey:
> It is possible to implement thunks without them creating their own
> frame. They can reuse the frame of the surrounding function ...
> The implementation just needs to take care
> to save and restore members of the frame that get clobbered when the
> thunk is running.
Michael Hudson:
> Woo. That's cute.
It *sounds* horrendous, but is actually pretty reasonable.
Conceptually, a thunk replaces a suite in the caller.
Most frame members are intended to be shared, and changes
should be visible -- so they don't have to (and shouldn't) be restored.
The only members that need special attention are (f_code, f_lasti)
and possibly (f_blockstack, f_iblock).
(f_code, f_lasti) would need to be replaced with a stack of pairs.
Finishing a code string would mean popping this stack, rather
than popping the whole frame.
Since a completed suite leaves the blockstack where it started,
(f_blockstack, f_iblock) *can* be ignored, though debugging and
CO_MAXBLOCKS both *suggest* replacing the pair with a stack of
pairs.
-jJ
More information about the Python-Dev
mailing list