WHUI! (was Re: [Python-Dev] Proposal: C API Macro to decref
and set to NULL)
Tim Peters
tim.peters at gmail.com
Fri Jul 16 02:45:20 CEST 2004
[Christian Tismer]
> How about
>
> if ( 0 ||
> || VISIT(self->readline)
> || VISIT(self->read)
> || VISIT(self->file)
> )
> return 1;
Well, "0 ||" doesn't do anything at all, it doesn't return the return
value of the visit() callback if a non-zero one is returned, it's
clumsier to write and read than what Jim checked in, and since
Py_VISIT does exactly one thing in exactly one context (tp_traverse
implementations), I have no fear at all of the "hidden" return.
Almost all tp_traverse implementations can (and should) look exactly
alike:
Py_VISIT(member1);
Py_VISIT(member2);
...
Py_VISIT(member_n);
return 0;
and Py_VISIT has no other use case. Why complicate it? Sticking a
"return" in a general purpose macro could be horrid indeed; Py_VISIT
is so specific, and of such limited use, there's simply nothing to
fear here. It makes writing "correct by casual inspection"
tp_traverse implementations dead easy, and has no effect on anything
else. A continued +1 for the simplest thing that could possibly work
here (which is happily a 100% solution in this case too).
More information about the Python-Dev
mailing list