Jeremy Hylton wrote:
I still don't like it, because it hides the return.
It should be used in the core, but you don't have to use it in your own code.
I'd rather do:
if (self->foo != NULL && (vret = visit(self->foo, arg))) return vret;
This violates the Python C style by putting an assignment in a conditional. You'd need to put the assignment to vret inside the body of an if statement. In other words, it would look just like the expansion of the VISIT() macro.
Except that you would see the return statement.