[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.