[Python-Dev] if/else and macros (was: CVS: python/dist/src/Objects unicodeobject.c,2.48,2.49)

Fredrik Lundh Fredrik Lundh" <effbot@telia.com
Mon, 17 Jul 2000 11:45:18 +0200


thomas wrote:

> Even more arguable is the coding style issue ;) I haven't seen this =
'if (1)
> {} else' trick used in macros elsewhere, not in Python and not in =
other
> code

hey, it's saving a whopping ten lines of code, or so ;-)

If I'd written that code, I'd spelled it out...  and come to
think of it, I *did* write the original version of that code!

FYI, I don't like that macro.  Instead of arguing about how
it should look, just get rid of it.

here's how the original code looked:

    if (ch < 0x80)
        goto bogus; /* illegal UTF-8 encoding */

    ...

bogus:
    PyErr_SetString(
        PyExc_ValueError, "invalid UTF-8 code"
        );
    ...

I would have implemented the changes like this:

    if (ch < 0x80) {
        detail =3D "illegal encoding";
        goto bogus;
    }

...

bogus:
    if (!utf8_decoding_error(&s, &p, errors, detail))
        goto ignore;
    ...

This solution gets rids of the macro mess, and what's more
important, it moves exception handling out of the inner loop.

(yes, it's using goto's, but it's a decoding loop, and it should
be as fast as it possibly can -- especially if you're feeding it
valid data!)

The result is smaller source, smaller code, a smaller inner loop,
faster decoding, and less discussion on this list.

</F>