diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2006-04-10 20:28:17 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2006-04-10 20:28:17 (GMT) |
commit | 0bc2ab9a20745e3cc7a2ca4cc01a3708e273e2dc (patch) | |
tree | 8c4064913b744ff0a8bcd5fbdcac81c5e0bc0dc1 /Objects/longobject.c | |
parent | a19dc0beb1d2e499b86f56a992e78e7e3d767ee3 (diff) | |
download | cpython-0bc2ab9a20745e3cc7a2ca4cc01a3708e273e2dc.zip cpython-0bc2ab9a20745e3cc7a2ca4cc01a3708e273e2dc.tar.gz cpython-0bc2ab9a20745e3cc7a2ca4cc01a3708e273e2dc.tar.bz2 |
Patch #837242: id() for large ptr should return a long.
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r-- | Objects/longobject.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c index 26f78c2..49f5c3b 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -771,6 +771,8 @@ PyObject * PyLong_FromVoidPtr(void *p) { #if SIZEOF_VOID_P <= SIZEOF_LONG + if ((long)p < 0) + return PyLong_FromUnsignedLong((unsigned long)p); return PyInt_FromLong((long)p); #else @@ -783,7 +785,7 @@ PyLong_FromVoidPtr(void *p) /* optimize null pointers */ if (p == NULL) return PyInt_FromLong(0); - return PyLong_FromLongLong((PY_LONG_LONG)p); + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p); #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */ } @@ -802,8 +804,10 @@ PyLong_AsVoidPtr(PyObject *vv) if (PyInt_Check(vv)) x = PyInt_AS_LONG(vv); - else + else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0) x = PyLong_AsLong(vv); + else + x = PyLong_AsUnsignedLong(vv); #else #ifndef HAVE_LONG_LONG @@ -816,8 +820,10 @@ PyLong_AsVoidPtr(PyObject *vv) if (PyInt_Check(vv)) x = PyInt_AS_LONG(vv); - else + else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0) x = PyLong_AsLongLong(vv); + else + x = PyLong_AsUnsignedLongLong(vv); #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */ |