[Python-Dev] Re: tp_clear return value (original) (raw)

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 getreferrers (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 getreferents, 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.