[Python-Dev] Re: tp_clear return value

Tim Peters tim_one@email.msn.com
Thu, 10 Apr 2003 01:03:42 -0400


[Neil Schemenauer]
>> Could the visit procedure keep track of errors?

[Martin v. Löwis]
> No. For get_referrers (as Tim explains), it might be acceptable but
> less efficient (since traversal should stop when a the object is found
> to be a referrer). For get_referents, an error in the callback should
> really abort traversal as the system just went out of memory.

Still, I expect both could be handled by setjmp in the gc module get_ref*
driver functions and longjmp (as needed) in the gc module visitor functions.
IOW, the tp_traverse slot functions don't really need to cooperate, or even
know anything about "early returns".

Why this may be more than just idly interesting:  the tp_traverse functions
are called a lot by gc.  The get_ref* functions are never called except when
explicitly asked for, and their speed just doesn't matter.  Burdening them
with funky control flow would be a real win if eliminating
almost-always-useless test/branch constructs in often-called tp_traverse
slots sped the latter.