[Python-Dev] int/long FutureWarning

Martin v. Löwis martin@v.loewis.de
28 Nov 2002 11:48:46 +0100


"M.-A. Lemburg" <mal@lemburg.com> writes:

> > Can you please explain how this will happen? If you do   int x;
> >   PyArg_ParseTuple(args,"i",&x);
> > and args is (0x80000000,), what will be the value of x?
> 
> x should be 0x80000000. Whether that's a negative number in
> its decimal representation is really not all that important if
> you are interfacing to 32-bit bitmaps ;-)

This was not my question. I asked what the value *will* be, not what
it *should* be. Can you answer the first question (how will this
happen)?

> I honestly don't think that anyone would write x = 0x80000000
> and then expect x < 0 to be True. People usually write hex
> representations when they are trying to do bit-level manipulations
> and these rarely deal with signed numeric data.

I agree with all that. However, I cannot see how an actual
implementation works that simultaneously meets all implied
requirements:
- integer constants are always positive; you get negative numbers
  only with a unary "-".
- ParseTuple continues to raise OverflowErrors for values that
  are out of range.
- The constant 0x80000000 has the same trailing 32 bits in the
  C int or long as it has in Python.

Regards,
Martin