[reportlab-users] Re: FutureWarnings in ttfonts.py with Python 2.3

Robin Becker reportlab-users@reportlab.com
Mon, 05 Apr 2004 13:34:57 +0100

Marius Gedminas wrote:

> I spent a few minutes experimenting with various variants of add32 a
> while ago.  I was quite suprised to find out that using Python's longs
> with bit shifts/addition modulo 2**32 did not give the desired results
> when negative numbers came into the picture.  The best variant I could
> come up with looked like this:
>     def add32(x, y):
>         z = x + y
>         if z > 2147483647:
>             return int(z - 4294967296L)
>         elif z < -2147483648:
>             return int(z + 4294967296L)
>         else:
>             return z
> It was a tad slower than the current version with those future warnings
> and incompatible with older versions of Python that did not promote ints
> to longs on overflow.  I gave up at that point.

I'm a bit puzzled as I thought we're supposed to be adding unsigned 32 bit numbers.

So can we not use

def add32(x,y): return _L2U32((x+y) & 0xffffffffL)

I'm fairly sure the more complex stuff doesn't work with older pythons
any how.

I get this in Python-2.1 with the above
 >>> add32(0xfffffffe,1)
 >>> add32(0xfffffffe,2)
 >>> add32(0xffffffff,2)
 >>> add32(-1,1)

I get the same in Python-2.3, but have to use long constants to avoid the warnings.
Robin Becker