WHUI! (was Re: [Python-Dev] Proposal: C API Macro to decref and set to NULL)

Jim Fulton jim at zope.com
Tue Jul 13 17:19:59 CEST 2004


Tim Peters wrote:
> [Jim Fulton, on non-zero return values from a visitproc]
> 
...

>>First, I don't like this macro, based on my own experience writing macros
>>that hide returns. :)
> 
> 
> Except VISIT is useful only inside a tp_traverse implementation, and
> all such implementations look exactly the same (VISIT, VISIT, VISIT,
> ..., sometimes with a surrounding loop).  That's not an accident,
> since the only purpose of a tp_traverse implementation is to VISIT
> containees.  So it's a special-purpose macro for a highly specific and
> uniform task, not a general-purpose macro that has to play well in
> arbitrary contexts.

I still don't like it, because it hides the return.

I'd rather do:

	if (self->foo != NULL && (vret = visit(self->foo, arg)))
		return vret;

than

         VISIT(self->foo)

So I'm not interested in the macro myself. :)

I'll say again that I don't like calling the return from the visit
proc an error indicator, because it's not, and because it goes against
the common idiom of using a negative return to indicate an error.
I think that these common idioms are important, because they help
us understand the code we're reading more easily.

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org


More information about the Python-Dev mailing list