Tim Peters wrote:
> That handles C99-ish platforms by defalt.  Other platforms (like
> Windows) would need to supply their own expansion in their pyconfig.h.
>  Neal's format would become the god-awful
> but platform-neutral:
> 
>           "%s() requires a code object with %" Py_SIZE_T_WIDTH "d free vars,"
>           " not %" Py_SIZE_T_WIDTH "d"

That's too ugly, IMO. So I could accept to write

        "%s() requires a code object with %ld free vars,"
        " not %ld", PyString_AsString(op->func_name),
        (long)nclosure, (long)nfree);

instead. Alternatively, if there is a real chance that it overflows
LONG_MAX (which there isn't, AFAIK - we don't support that many free
vars), we could also write

        "%s() requires a code object with %ld free vars,"
        " not %ld", PyString_AsString(op->func_name),
        Py_long_ceil(nclosure), Py_long_ceil(nfree));

with

#define Py_long_ceil(n) ((n) > LONG_MAX ? LONG_MAX : \
    (n) < LONG_MIN ? LONG_MIN : (n))

On most platforms, the compiler should notice that the conditions
are both known false, and collaps this to (n).

If this ever overflows, somebody will have to remember that
this is really +/- infinity.

Regards,
Martin

P.S. Proposals for a different macro name are thankfully accepted.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to