On Saturday 10 March 2007, Greg Ewing wrote:
> I'm wondering whether something here should really be using
> uintptr_t instead of intptr_t. Does it work if you use
> 
>    ctypedef unsigned long intptr_t
> 
> instead?

Yeah, I think that this is the right thing to do - I have realized this just 
after sending my mail and going to bed yesterday. The problem is that Python 
2.4 and older were sometimes returning longs but signed when calling id() 
(the problem occurs in models/material.pyx:95) , so negative numbers were 
possible. The only change was that now id() returns an always positive 
(unsigned long) in Python 2.5 and you cannot store an unsigned long needing 
32 bits into a signed long where you have only 31 bits available (the last 
one is the sign)

An easy way to see this change is to call id(object()) in Python 2.4 and 2.5. 
2.4 will often return a negative value, 2.5 always positive.

I will try to change this to unsigned long and recompile, let's see what 
happens. Long long obviously "fixed" it, because instead of adding only the 
one "missing" bit it added a whole 32 bit word.

Jan

-- 

Jan Ciger
GPG public key: http://www.keyserver.net/

Attachment: pgpLSBBwdzBoS.pgp
Description: PGP signature

_______________________________________________
Soya-user mailing list
Soya-user@gna.org
https://mail.gna.org/listinfo/soya-user

Reply via email to